青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

山寨:不是最好的,是最適合我們的!歡迎體驗(yàn)山寨 中文版MSDN

Blog @ Blog

當(dāng)華美的葉片落盡,生命的脈絡(luò)才歷歷可見(jiàn)。 -- 聶魯達(dá)

常用鏈接

統(tǒng)計(jì)

積分與排名

BBS

Blog

Web

最新評(píng)論

[轉(zhuǎn)]深入C++指針

本篇是第一篇,介紹指針的本質(zhì)是什么。

在相當(dāng)一部分的C++教程中,講到指針時(shí),基本上都會(huì)舉swap(int a,int b)這個(gè) 數(shù)據(jù)交換的例子。我也同樣愿意舉這個(gè)例子作為講述指針的開(kāi)始。

下面是類的代碼內(nèi)容:

//……限于篇幅,只留說(shuō)明問(wèn)題的部分內(nèi)容……

定義部分:

public:

           
void swap(int a,int b);

實(shí)現(xiàn)部分:

void CPointerResearch::swap(int x,int y){

           
int nTmp = x;

           x 
= y;

           y 
= nTmp;

}

下面是測(cè)試數(shù)據(jù)及結(jié)果:

輸入:

100, 200

輸出(執(zhí)行swap函數(shù)后):

100 200

Press any key to continue

 

可以很清楚的看出,并沒(méi)有實(shí)現(xiàn)數(shù)據(jù)交換。

我們來(lái)假想一下程序員寫(xiě)這樣程序時(shí)的心里:有兩個(gè)小框,甲框放數(shù)字為100的卡片,乙框放數(shù)字為200的卡片,現(xiàn)將兩張卡片交換一下位置,變成甲框存放數(shù)字為200的卡片,乙框存放數(shù)字為100的卡片。

這樣的想法有問(wèn)題嗎?答案很明確,一點(diǎn)點(diǎn)問(wèn)題都沒(méi)有!想法完全正確,他(她)只要確實(shí)是這樣做的,卡片交換就一定能成功。但為什么上面的程序模擬這樣的執(zhí)行過(guò)程,結(jié)果卻不是想要的呢?要想徹底弄明白這個(gè)問(wèn)題,我們必須認(rèn)識(shí)問(wèn)題的根本,即這個(gè)問(wèn)題的本質(zhì)是什么,這才是真正解決問(wèn)題。

我們來(lái)深入分析一下上面那個(gè)看似簡(jiǎn)單的假想情景。第一,有兩個(gè)框,這是確定的事實(shí),毋庸置疑。第二,框里都裝有卡片,并且上面的數(shù)字不同,這個(gè)是不爭(zhēng)的事實(shí)。第三,交換卡片過(guò)程中,雖然兩個(gè)框都沒(méi)挪動(dòng),但里面的卡片都有挪動(dòng)。第四,卡片挪動(dòng)是從一個(gè)框挪到另一個(gè)框。正是有了這四點(diǎn)作保證,卡片才得以成功交換。換句話說(shuō),上面的數(shù)據(jù)交換程序的執(zhí)行交換過(guò)程如果滿足這四個(gè)條件的話,計(jì)算機(jī)執(zhí)行后輸出的結(jié)果就一定是我們期待的正確結(jié)果。那么,至此出錯(cuò)原因已很明確,就是計(jì)算機(jī)執(zhí)行程序的過(guò)程中,上面這四點(diǎn)至少有一點(diǎn)一定不符合。下面一一分析。

第一, 從輸入條件看。

輸入條件是int a =100;int b= 200;從這兩個(gè)C++語(yǔ)句我們可以看出,兩個(gè)“框”已經(jīng)有了,分別是ab,也就是說(shuō)具備了第一個(gè)條件。此外,甲框(a)放了數(shù)字為100的卡片(int a=100;, 乙框(b)放了數(shù)字為200的卡片(int b=200;),這說(shuō)明第二個(gè)條件也具備。從輸入條件已經(jīng)看不出什么其它的有用的信息。至此我們已經(jīng)可以判斷出問(wèn)題出在后兩個(gè)條件有不滿足的地方。

第二, swap函數(shù)體看。

函數(shù)體         int nTmp = x;              x = y;                 x = nTmp;是最典型的只用三行代碼就實(shí)現(xiàn)數(shù)據(jù)交換的代碼。沒(méi)問(wèn)題,在執(zhí)行這三行代碼前和執(zhí)行后分別打印輸出就可以看得一清二楚,確實(shí)實(shí)現(xiàn)交換了。這說(shuō)明上面的第四個(gè)條件也滿足,因?yàn)檫@三行代碼就是“從甲框拿x卡片放到地上,再把乙框的y卡片放入甲框,最好將地上的那張卡片(就是x卡片)揀起來(lái)放到乙框中去”。那么,到現(xiàn)在可以說(shuō)明問(wèn)題出在第三個(gè)條件不滿足。我們?cè)倮^續(xù)分析下去。

第三, swap函數(shù)聲明看。

從數(shù)據(jù)交換的程序代碼看,也就只剩這么一點(diǎn)東西還沒(méi)有去分析一下。我們的執(zhí)行過(guò)程其實(shí)又有幾個(gè)分步驟:

首先,輸入:int a= 100; int b= 200;這只是賦值操作,肯定沒(méi)有問(wèn)題。

其次,執(zhí)行:步驟1,為調(diào)swap(int x,int y)函數(shù)做準(zhǔn)備,將a傳給x,b傳給y

           步驟2,執(zhí)行swap(x, y),就是執(zhí)行函數(shù)體內(nèi)容。步驟2在上面已經(jīng)得到驗(yàn)證,沒(méi)問(wèn)題。

最后,執(zhí)行完畢在主函數(shù)里輸出ab100,200,這是調(diào)C++標(biāo)準(zhǔn)輸出函數(shù)輸出的,提供什么數(shù)據(jù)就如實(shí)地輸出來(lái)。這也沒(méi)問(wèn)題。

至此,問(wèn)題已經(jīng)可以定位,就在“其次”里的“步驟1”!對(duì)這一步的執(zhí)行過(guò)程再繼續(xù)細(xì)分,就是:將甲框(輸入的a)的數(shù)字為100的卡片放到丙框(swap函數(shù)的參數(shù)x1, 將乙框(b)的數(shù)字為200的卡片放到丁框(swap函數(shù)的參數(shù)y)。程序接下來(lái)就是執(zhí)行“其次”里的“步驟2”,也即進(jìn)入函數(shù)體執(zhí)行,這時(shí)候在悄悄的把丙框和丁框的卡片相交換。可見(jiàn)原來(lái)交換的是丙框和丁框!甲框和乙框原來(lái)是什么樣還是什么樣。這當(dāng)然不會(huì)看到期望的輸出。

所以解決問(wèn)題的根本是必須要“找對(duì)框”,只交換想要交換的“框”。對(duì)這個(gè)“找對(duì)框”的真正理解程度會(huì)直接反映出對(duì)指針的真正理解程度。 這樣,可能的解決方法比如:

基于指針swap方法(直接拿甲框和乙框的卡片并進(jìn)行交換,根本就沒(méi)有丙框和丁框):

void CPointerResearch::swap(int* x,int* y){

           
int nTmp = *x;

           
*= *y;

           
*= nTmp;

}

基于引用swap方法(不直接用丙框(而是引用到甲框)和丁框(而是引用到乙框)):

void CPointerResearch:: swap (int& x,int& y){

           
int nTmp = x;

           x 
= y;

           y 
= nTmp;

}

1本文舉的假想例子主要是為了說(shuō)明問(wèn)題,但例子不一定很貼切。“將甲框(輸入的a)的數(shù)字為100的卡片放到丙框(swap函數(shù)的參數(shù)x)”這句話,更貼切的說(shuō)應(yīng)該是“甲框有跟線系在數(shù)字為100的卡片上,現(xiàn)在執(zhí)行“a傳給x”操作,就是說(shuō)丙框要拉一根線出來(lái)也系到那張數(shù)字為100的卡片上”。

 

本篇內(nèi)容強(qiáng)調(diào)的就是一點(diǎn),“什么是指針?指針的本質(zhì)是什么?”。理解指針的本質(zhì)是學(xué)習(xí)指針的關(guān)鍵所在。特別是初學(xué)指針者,如果能把這個(gè)swap函數(shù)真正搞明白,那么對(duì)指針的理解應(yīng)該說(shuō)已經(jīng)有了一定的功底。如果很浮躁或很膚淺的去看待指針,是不會(huì)真正掌握指針的豐富內(nèi)涵的。用指針,要用,那就要用到“沒(méi)指針,就感覺(jué)不知道如何是好”這個(gè)地步。否則用指針也沒(méi)太大的意思,又容易出錯(cuò),不止怎么排除,自己可能興趣也不高。

posted on 2007-08-12 23:53 isabc 閱讀(378) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C++基礎(chǔ)

廣告信息(免費(fèi)廣告聯(lián)系)

中文版MSDN:
歡迎體驗(yàn)

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美体内谢she精2性欧美| 性欧美暴力猛交另类hd| 狂野欧美一区| 亚洲一级片在线看| 亚洲精品日韩在线| 美女黄网久久| 久久裸体视频| 米奇777在线欧美播放| 久久精品国产999大香线蕉| 亚洲性视频网站| 亚洲视频你懂的| 一本色道久久综合亚洲精品按摩| 一区二区三区自拍| 国产综合激情| 国产一区二区欧美日韩| 国产精品日韩欧美一区二区| 久久在线免费观看| 亚洲午夜三级在线| 日韩一级大片在线| 99亚洲精品| 亚洲一区影院| 欧美一区二区福利在线| 欧美日韩一区精品| 欧美成人精品影院| 欧美日韩性生活视频| 国产精品播放| 国产视频一区二区在线观看| 国产一区清纯| 亚洲高清自拍| 一区二区三区精品久久久| 亚洲自拍电影| 久久精品国产亚洲aⅴ| 久久亚洲午夜电影| 亚洲欧洲精品一区| 一区二区三区成人精品| 亚洲免费一级电影| 久久精品国内一区二区三区| 老司机67194精品线观看| 欧美成人综合| 国产精品亚洲片夜色在线| 国产综合一区二区| 99精品视频免费观看| 香蕉精品999视频一区二区| 久久夜色精品国产亚洲aⅴ| 亚洲国产清纯| 欧美一站二站| 欧美日韩午夜剧场| 好看不卡的中文字幕| 一本高清dvd不卡在线观看| 久久精品国产一区二区三区免费看| 欧美99久久| 亚洲国产美女精品久久久久∴| 亚洲黑丝在线| 在线观看亚洲视频| 一区二区电影免费在线观看| 午夜欧美大尺度福利影院在线看| 免费亚洲电影| 国产在线乱码一区二区三区| 最新日韩在线| 99re国产精品| 另类av一区二区| 一本不卡影院| 欧美阿v一级看视频| 国产精品久久久久久模特| 国产欧美日韩不卡| 一本色道久久综合亚洲91| 欧美在线视频免费播放| 欧美亚洲在线播放| 一本一本久久a久久精品综合妖精| 久久亚洲精品网站| 国产一区二区三区四区五区美女| 中文精品视频一区二区在线观看| 蜜臀久久久99精品久久久久久| 欧美在线地址| 欧美成人嫩草网站| 免费成年人欧美视频| 国产亚洲福利社区一区| 亚洲精品乱码久久久久| 欧美专区在线观看一区| 亚洲视频中文字幕| 欧美日韩一区二区在线播放| 亚洲精品久久视频| 亚洲激情影视| 久久综合亚洲社区| 国产视频欧美| 亚洲一区二区三区涩| 日韩一区二区久久| 欧美精品www| 国产亚洲欧美激情| 亚洲手机视频| 亚洲欧洲一级| 欧美精品1区2区| 久热精品视频在线观看| 亚洲国产成人av| 亚洲国产精品t66y| 欧美精品久久99| 一区二区日韩精品| 亚洲视频电影在线| 国产乱码精品一区二区三区五月婷 | 日韩一级免费| 欧美日韩国产不卡| 亚洲在线日韩| 久久精品免费电影| 亚洲激情社区| 日韩视频一区二区三区| 国产精品久久久久久户外露出 | 欧美日韩情趣电影| 亚洲免费在线视频一区 二区| 亚洲一级二级| 永久免费精品影视网站| 亚洲国产视频a| 国产精品日韩一区| 久热这里只精品99re8久| 欧美电影专区| 亚洲综合久久久久| 久久久久国产精品人| 亚洲精品看片| 亚洲欧美一区二区三区在线| 在线观看日韩av电影| 99精品视频免费观看视频| 国产日韩欧美成人| 亚洲国产精品激情在线观看| 国产精品久久久久久久久久久久久久| 久久se精品一区二区| 久久久一二三| 西西裸体人体做爰大胆久久久| 久久午夜电影| 亚洲欧美日韩国产另类专区| 亚洲尤物在线视频观看| 亚洲国产精品精华液网站| 亚洲视频久久| 欧美一区二区性| 99在线精品观看| 久久久国产成人精品| 久久久国产精品亚洲一区| 久久久久久亚洲精品杨幂换脸| 99视频热这里只有精品免费| 久久9热精品视频| 在线视频你懂得一区二区三区| 欧美专区中文字幕| 亚洲永久免费视频| 欧美激情一区二区三级高清视频| 久久av二区| 欧美日韩一区综合| 欧美激情中文不卡| 韩国成人理伦片免费播放| 亚洲香蕉伊综合在人在线视看| 国产日韩欧美在线视频观看| 久久久精品视频成人| 国产精品成人久久久久| 亚洲国产老妈| 亚洲欧洲精品一区二区三区波多野1战4| 午夜在线视频观看日韩17c| 亚洲欧美久久久久一区二区三区| 欧美激情一区二区在线 | 亚洲日本中文字幕区| 伊人精品视频| 中文av字幕一区| 一区二区三区久久网| 麻豆免费精品视频| 久久riav二区三区| 国产精品二区二区三区| 一本色道久久综合亚洲精品高清 | 国产欧美三级| 午夜久久电影网| 欧美一站二站| 国产亚洲欧美aaaa| 欧美成人福利视频| 久久久精品动漫| 亚洲第一在线综合在线| 亚洲精品国久久99热| 欧美午夜精品久久久久久超碰| 午夜视频一区在线观看| 亚洲高清视频一区| 久久成年人视频| 91久久国产综合久久| 欧美午夜宅男影院| 久久久午夜电影| 在线亚洲精品| 免费亚洲一区二区| 亚洲影音先锋| 亚洲国产毛片完整版 | 久久久一区二区三区| 99re这里只有精品6| 国产一区二区三区四区五区美女 | 欧美一区二区三区在线观看| 亚洲国产小视频在线观看| 欧美一区成人| 欧美大片在线看免费观看| 性色av一区二区三区在线观看| 91久久亚洲| 蜜桃av噜噜一区| 久久精品一区二区三区四区 | 久久www成人_看片免费不卡| 日韩一级大片在线| 亚洲国产天堂久久国产91| 国产视频在线观看一区二区| 欧美日韩综合另类| 欧美激情一区二区久久久| 久久亚洲电影|