資源描述:
《徹底搞定C語(yǔ)言指針轉(zhuǎn).doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、徹底搞定C語(yǔ)言指針[轉(zhuǎn)]1.語(yǔ)言中變量的實(shí)質(zhì)???要理解C指針,我認(rèn)為一定要理解C中“變量”的存儲(chǔ)實(shí)質(zhì),所以我就從“變量”這個(gè)東西開(kāi)始講起吧!???先來(lái)理解理解內(nèi)存空間吧!請(qǐng)看下圖:內(nèi)存地址→?6?????7 8?????9 10?????11?????12?????13-----------------------------------------------------------------···
2、
3、
4、
5、
6、
7、
8、
9、··---------------------------------------------------------
10、--------???如圖所示,內(nèi)存只不過(guò)是一個(gè)存放數(shù)據(jù)的空間,就好像我的看電影時(shí)的電影院中的座位一樣。每個(gè)座位都要編號(hào),我們的內(nèi)存要存放各種各樣的數(shù)據(jù),當(dāng)然我們要知道我們的這些數(shù)據(jù)存放在什么位置吧!所以內(nèi)存也要象座位一樣進(jìn)行編號(hào)了,這就是我們所說(shuō)的內(nèi)存編址。座位可以是按一個(gè)座位一個(gè)號(hào)碼的從一號(hào)開(kāi)始編號(hào),內(nèi)存則是按一個(gè)字節(jié)一個(gè)字節(jié)進(jìn)行編址,如上圖所示。每個(gè)字節(jié)都有個(gè)編號(hào),我們稱(chēng)之為內(nèi)存地址。好了,我說(shuō)了這么多,現(xiàn)在你能理解內(nèi)存空間這個(gè)概念嗎????我們繼續(xù)看看以下的C、C++語(yǔ)言變量申明:intI;chara;???每次我們要使用某變量時(shí)都要事先這樣申明它,它其實(shí)是內(nèi)
11、存中申請(qǐng)了一個(gè)名為i的整型變量寬度的空間(DOS下的16位編程中其寬度為二個(gè)字節(jié)),和一個(gè)名為a的字符型變量寬度的空間(占一個(gè)字節(jié))。???我們又如何來(lái)理解變量是如何存在的呢。當(dāng)我們?nèi)缦律昝髯兞繒r(shí):intI;chara;???內(nèi)存中的映象可能如下圖:內(nèi)存地址→??6?????7 8?????9?????10?????11???12?????13------------------------------------------------------------------···
12、
13、
14、
15、
16、
17、
18、
19、··--------------------
20、----------------------------------------------?變量名
21、→i ?←
22、→a?←
23、???圖中可看出,i在內(nèi)存起始地址為6上申請(qǐng)了兩個(gè)字節(jié)的空間(我這里假設(shè)了int的寬度為16位,不同系統(tǒng)中int的寬度是可能不一樣的),并命名為i。a在內(nèi)存地址為8上申請(qǐng)了一字節(jié)的空間,并命名為a。這樣我們就有兩個(gè)不同類(lèi)型的變量了。2.賦值給變量???再看下面賦值:i=30a=’t’???你當(dāng)然知道個(gè)兩個(gè)語(yǔ)句是將30存入i變量的內(nèi)存空間中,將’t’字符存入a變量的內(nèi)存空間中。我們可以這樣的形象理解啦:內(nèi)存地址→??6?????7 8?????
24、9?????10?????11???12?????13-----------------------------------------------------------------------···
25、 30?????
26、?‘t’?
27、
28、
29、
30、
31、··-----------------------------------------------------------------------
32、→i ?←
33、→a?←
34、3.變量在哪里?(即我想知道變量的地址)???好了,接下來(lái)我們來(lái)看看&i是什么意思????是取i變量所在的地址編號(hào)嘛!我們可以這樣讀它:返
35、回i變量的地址編號(hào)。你記住了嗎????我要在屏幕上顯示變量的地址值的話,可以寫(xiě)如下代碼:printf(“%d”,&i);???以上圖的內(nèi)存映象所例,屏幕上顯示的不是i值30,而是顯示i的內(nèi)存地址編號(hào)6了。當(dāng)然實(shí)際你操作的時(shí),i變量的地址值不會(huì)是這個(gè)數(shù)了。???這就是我認(rèn)為作為初學(xué)者們所應(yīng)想象的變量存儲(chǔ)實(shí)質(zhì)了。請(qǐng)這樣理解吧!????最后總結(jié)代碼如下:intmain(){ inti=39; printf(“%d”,i);??//① printf(“%d”,&i);?//②????}????現(xiàn)在你可知道①、②兩個(gè)printf分別在屏幕上輸出的是i的什么東西啊?
36、???好啦!下面我們就開(kāi)始真正進(jìn)入指針的學(xué)習(xí)了。Comeon!(待續(xù)…)二.指針是什么東西<想說(shuō)弄懂你不容易?。∥覀?cè)S多初學(xué)指針的人都要這樣的感慨。我常常在思索它,為什么呢?其實(shí)生活中處處都有指針。我們也處處在使用它。有了它我們的生活才更加方便了。沒(méi)有指針,那生活才不方便。不信?你看下面的例子。這是一個(gè)生活中的例子:比如說(shuō)你要我借給你一本書(shū),我到了你宿舍,但是你人不在宿舍,于是我把書(shū)放在你的2層3號(hào)的書(shū)架上,并寫(xiě)了一張紙條放在你的桌上。紙條上寫(xiě)著:你要的書(shū)在第2層3號(hào)的書(shū)架上。當(dāng)你回來(lái)時(shí),看到這張紙條。你就知道了我借與你的書(shū)放在哪了。你想想看,這張紙