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

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

Blog @ Blog

當華美的葉片落盡,生命的脈絡才歷歷可見。 -- 聶魯達

常用鏈接

統計

積分與排名

BBS

Blog

Web

最新評論

[轉]深入C++指針

本篇是第一篇,介紹指針的本質是什么。

在相當一部分的C++教程中,講到指針時,基本上都會舉swap(int a,int b)這個 數據交換的例子。我也同樣愿意舉這個例子作為講述指針的開始。

下面是類的代碼內容:

//……限于篇幅,只留說明問題的部分內容……

定義部分:

public:

           
void swap(int a,int b);

實現部分:

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

           
int nTmp = x;

           x 
= y;

           y 
= nTmp;

}

下面是測試數據及結果:

輸入:

100 200

輸出(執行swap函數后):

100 200

Press any key to continue

 

可以很清楚的看出,并沒有實現數據交換。

我們來假想一下程序員寫這樣程序時的心里:有兩個小框,甲框放數字為100的卡片,乙框放數字為200的卡片,現將兩張卡片交換一下位置,變成甲框存放數字為200的卡片,乙框存放數字為100的卡片。

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

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

第一, 從輸入條件看。

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

第二, swap函數體看。

函數體         int nTmp = x;              x = y;                 x = nTmp;是最典型的只用三行代碼就實現數據交換的代碼。沒問題,在執行這三行代碼前和執行后分別打印輸出就可以看得一清二楚,確實實現交換了。這說明上面的第四個條件也滿足,因為這三行代碼就是“從甲框拿x卡片放到地上,再把乙框的y卡片放入甲框,最好將地上的那張卡片(就是x卡片)揀起來放到乙框中去”。那么,到現在可以說明問題出在第三個條件不滿足。我們再繼續分析下去。

第三, swap函數聲明看。

從數據交換的程序代碼看,也就只剩這么一點東西還沒有去分析一下。我們的執行過程其實又有幾個分步驟:

首先,輸入:int a= 100; int b= 200;這只是賦值操作,肯定沒有問題。

其次,執行:步驟1,為調swap(int x,int y)函數做準備,將a傳給x,b傳給y。

           步驟2,執行swap(x, y),就是執行函數體內容。步驟2在上面已經得到驗證,沒問題。

最后,執行完畢在主函數里輸出ab100,200,這是調C++標準輸出函數輸出的,提供什么數據就如實地輸出來。這也沒問題。

至此,問題已經可以定位,就在“其次”里的“步驟1”!對這一步的執行過程再繼續細分,就是:將甲框(輸入的a)的數字為100的卡片放到丙框(swap函數的參數x1, 將乙框(b)的數字為200的卡片放到丁框(swap函數的參數y)。程序接下來就是執行“其次”里的“步驟2”,也即進入函數體執行,這時候在悄悄的把丙框和丁框的卡片相交換??梢娫瓉斫粨Q的是丙框和丁框!甲框和乙框原來是什么樣還是什么樣。這當然不會看到期望的輸出。

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

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

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本文舉的假想例子主要是為了說明問題,但例子不一定很貼切。“將甲框(輸入的a)的數字為100的卡片放到丙框(swap函數的參數x)”這句話,更貼切的說應該是“甲框有跟線系在數字為100的卡片上,現在執行“a傳給x”操作,就是說丙框要拉一根線出來也系到那張數字為100的卡片上”。

 

本篇內容強調的就是一點,“什么是指針?指針的本質是什么?”。理解指針的本質是學習指針的關鍵所在。特別是初學指針者,如果能把這個swap函數真正搞明白,那么對指針的理解應該說已經有了一定的功底。如果很浮躁或很膚淺的去看待指針,是不會真正掌握指針的豐富內涵的。用指針,要用,那就要用到“沒指針,就感覺不知道如何是好”這個地步。否則用指針也沒太大的意思,又容易出錯,不止怎么排除,自己可能興趣也不高。

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

廣告信息(免費廣告聯系)

中文版MSDN:
歡迎體驗

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久不见久久见免费视频1| 美女视频网站黄色亚洲| 亚洲激情网站| 欧美大色视频| 9国产精品视频| 亚洲精品一区二区三区樱花 | 久久深夜福利免费观看| 香蕉久久夜色精品国产使用方法| 国产精品亚洲人在线观看| 久久国产精品电影| 老司机67194精品线观看| 亚洲日本无吗高清不卡| 亚洲激情视频在线播放| 国产精品男女猛烈高潮激情| 久久久国产午夜精品| 美女脱光内衣内裤视频久久影院| 一本色道久久综合亚洲精品高清| 亚洲小视频在线观看| 一区免费观看视频| 一区二区三区日韩欧美| 红桃视频成人| 99精品热视频| 一区二区在线观看视频| 99综合精品| 亚洲第一精品电影| 一区二区久久| 在线视频国产日韩| 国产精品99久久久久久久久久久久 | 猛男gaygay欧美视频| 欧美精品一区二区在线播放| 欧美一级在线视频| 欧美高清视频在线| 久久人体大胆视频| 欧美日韩亚洲一区二区三区四区 | 日韩视频不卡| 久久国产精品高清| 午夜欧美不卡精品aaaaa| 欧美a级一区二区| 久久久久高清| 国产精品视频九色porn| 亚洲精品国产精品乱码不99| 一区二区在线观看视频| 亚洲一区二区三区免费在线观看 | 欧美香蕉大胸在线视频观看| 六月婷婷久久| 国产亚洲成av人在线观看导航 | 欧美大片一区| 国产一区二区三区久久久| 夜夜嗨av一区二区三区中文字幕 | 国产精品mv在线观看| 欧美激情第六页| 极品av少妇一区二区| 亚洲欧美日韩国产综合在线| 亚洲一区网站| 欧美日韩一二三四五区| 亚洲精品一区久久久久久| 亚洲人成人一区二区在线观看| 久久精品91久久香蕉加勒比| 欧美一区亚洲二区| 国产精品久久久久久亚洲调教 | 欧美成人高清| 亚洲成色精品| 美女主播一区| 亚洲成人在线网| 亚洲韩国青草视频| 免费不卡中文字幕视频| 麻豆成人在线播放| 亚洲第一在线综合在线| 久久综合电影| 91久久精品日日躁夜夜躁国产| 亚洲黄色在线看| 欧美a级理论片| 日韩一本二本av| 亚洲欧美影院| 国内精品久久久久国产盗摄免费观看完整版| 午夜精品久久久久久久白皮肤| 久久成人av少妇免费| 极品尤物av久久免费看 | 夜夜嗨av一区二区三区| 亚洲图片在区色| 国产精品伦一区| 性做久久久久久久久| 久久伊人免费视频| 亚洲精品偷拍| 国产精品一区二区三区久久久| 欧美在线一二三| 亚洲高清三级视频| 亚洲欧美日韩精品综合在线观看| 国产日韩一区在线| 欧美gay视频| 亚洲一区免费视频| 美女被久久久| 亚洲午夜久久久久久久久电影网| 国产精品视频网址| 久久夜色精品亚洲噜噜国产mv| 亚洲国产一二三| 欧美亚洲一级| 亚洲精品色婷婷福利天堂| 欧美系列精品| 久久亚洲欧美| 亚洲一区中文字幕在线观看| 久久亚洲私人国产精品va| 日韩视频久久| 国精产品99永久一区一区| 欧美精品二区| 久久精品国产999大香线蕉| 亚洲日本一区二区| 麻豆精品一区二区综合av| 亚洲少妇在线| 亚洲黄色毛片| 好吊一区二区三区| 欧美色另类天堂2015| 久久久中精品2020中文| 亚洲视频免费看| 亚洲国产精品一区二区第四页av | 小嫩嫩精品导航| 亚洲免费成人| 韩国三级电影久久久久久| 欧美日韩综合在线| 欧美成人黑人xx视频免费观看| 午夜精品美女久久久久av福利| 亚洲精品人人| 欧美激情1区2区3区| 久久精品人人爽| 亚洲综合色噜噜狠狠| 亚洲乱码一区二区| 亚洲国产美女| 狠狠色伊人亚洲综合网站色| 国产精品无码专区在线观看| 欧美日韩小视频| 欧美日本韩国在线| 欧美激情一区二区三区全黄| 美国成人直播| 久久伊伊香蕉| 久久影视三级福利片| 久久精品国产清自在天天线 | 亚洲国产精品免费| 玖玖在线精品| 久久久久久自在自线| 久久国产精品久久久久久久久久 | 午夜影院日韩| 午夜激情一区| 亚洲欧美不卡| 欧美在线视频a| 久久久久国色av免费观看性色| 欧美一区二区大片| 久久超碰97人人做人人爱| 久久成人精品无人区| 久久久99国产精品免费| 久久在线免费| 欧美激情综合色| 亚洲日本国产| 亚洲午夜激情网页| 午夜精品福利电影| 久久久噜噜噜久噜久久| 男男成人高潮片免费网站| 欧美激情中文字幕一区二区| 欧美绝品在线观看成人午夜影视| 欧美噜噜久久久xxx| 欧美视频久久| 国产亚洲精品一区二555| 永久91嫩草亚洲精品人人| 亚洲国产成人av| 亚洲视频碰碰| 久久精品女人天堂| 亚洲高清av| 亚洲视频欧美在线| 久久精品女人| 欧美日韩国产123区| 国产欧美韩国高清| 亚洲激情第一页| 亚洲天堂视频在线观看| 久久久久99| 亚洲精品一区二区三区四区高清 | 午夜精彩国产免费不卡不顿大片| 欧美在线观看一区| 欧美久色视频| 国产亚洲欧洲997久久综合| 最新国产乱人伦偷精品免费网站 | 久久免费精品日本久久中文字幕| 欧美大片免费看| 亚洲性图久久| 另类欧美日韩国产在线| 国产精品日韩精品| 亚洲国产影院| 欧美在线免费观看视频| 亚洲片在线观看| 欧美中文字幕| 欧美色网在线| 亚洲精品国产无天堂网2021| 欧美与黑人午夜性猛交久久久| 欧美韩日一区| 欧美在线免费视屏| 国产精品成人观看视频国产奇米| 亚洲第一伊人| 久久亚洲精品中文字幕冲田杏梨| 99在线精品观看| 欧美成人一区二区三区在线观看| 国产一区自拍视频| 欧美亚洲在线|