資源描述:
《徹底搞定c語(yǔ)言指針》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、徹底搞定C語(yǔ)言指針1.語(yǔ)言中變量的實(shí)質(zhì)要理解C指針,我認(rèn)為一定要理解C中“變量”的存儲(chǔ)實(shí)質(zhì),所以我就從“變量”這個(gè)東西開始講起吧!先來(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)開始編號(hào),內(nèi)存則是按一個(gè)字節(jié)一個(gè)字節(jié)進(jìn)行編址,如上圖所示。每個(gè)字節(jié)都有個(gè)編號(hào),我們稱之為內(nèi)存地址。好了,我說(shuō)了這么多,現(xiàn)在你能理解內(nèi)存空間這個(gè)概念嗎?我們繼續(xù)看看以下的C、C++語(yǔ)言變量申明:intI;chara;每次我們要使用某變量時(shí)都要事先這樣申明它,它其實(shí)是內(nèi)存中申請(qǐng)
11、了一個(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è)不同類型的變量了。2.賦值給變量再看下面賦值:i=30a=‘t’你當(dāng)然知道個(gè)兩個(gè)語(yǔ)句是將30存入i變量的內(nèi)存空間中,將‘t’字符存入a變量的內(nèi)存空間中。我們可以這樣的形象理解啦:內(nèi)存地址→ 6 7 8 9
24、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)嘛!我們可以這樣讀它:返回i變量的地址
35、編號(hào)。你記住了嗎?我要在屏幕上顯示變量的地址值的話,可以寫如下代碼: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的什么東西???好啦!下面我們就開始真正進(jìn)入指針的學(xué)習(xí)了。二、指針是什
36、么東西想說(shuō)弄懂你不容易??!我們?cè)S多初學(xué)指針的人都要這樣的感慨。我常常在思索它,為什么呢?其實(shí)生活中處處都有指針。我們也處處在使用它。有了它我們的生活才更加方便了。沒有指針,那生活才不方便。不信?你看下面的例子。這是一個(gè)生活中的例子:比如說(shuō)你要我借給你一本書,我到了你宿舍,但是你人不在宿舍,于是我把書放在你的2層3號(hào)的書架上,并寫了一張紙條放在你的桌上。紙條上寫著:你要的書在第2層3號(hào)的書架上。當(dāng)你回來(lái)時(shí),看到這張紙條。你就知道了我借與你的書放在哪了。你想想看,這張紙條的作用,紙條本身不是書,它上面也沒有放著書。那么你又如何知道書的位置呢?因?yàn)榧垪l上寫著書
37、的位置嘛!其實(shí)這張紙條就是一個(gè)指針了。它上面的內(nèi)容不是書本身,而是書的地址,你通