版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第8章地址和指針指針是C語(yǔ)言中的一個(gè)重要概念,也是C語(yǔ)言的一個(gè)重要特色。正確而靈活地運(yùn)用它,可以有效地表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu);能動(dòng)態(tài)分配內(nèi)存;能方便地使用字符串;有效而方便地使用數(shù)組;在調(diào)用函數(shù)時(shí)能得到多于一個(gè)的返回值;能直接處理內(nèi)存地址等,這對(duì)設(shè)計(jì)系統(tǒng)軟件是很必要的。掌握指針的應(yīng)用,可以使程序簡(jiǎn)潔、緊湊、高效。8.1變量的地址和指針計(jì)算機(jī)的內(nèi)存是以字節(jié)為單位的一片連續(xù)的存儲(chǔ)空間,我們稱其為一個(gè)存儲(chǔ)單元。每個(gè)存儲(chǔ)單元都有唯一的編號(hào),我們稱為
2、內(nèi)存地址(一般用20位二進(jìn)制數(shù)表示,為書寫方便,更多的是用16進(jìn)制數(shù)表示。為的直觀性,我們?cè)谟懻撝杏?0進(jìn)制數(shù)表示)。由于內(nèi)在是連續(xù)的,所以地址也是連續(xù)的。在程序中,一個(gè)變量實(shí)質(zhì)上代表了“內(nèi)存中的某個(gè)存儲(chǔ)單元”(當(dāng)某種類型的變量占用多個(gè)字節(jié)的內(nèi)存時(shí),規(guī)定用最小的地址來表示)。若在程序中定義了一個(gè)變量,C編譯系統(tǒng)會(huì)根據(jù)定義的變量類型,為其分配若干個(gè)字節(jié)的存儲(chǔ)空間。在VC6.0中,shtint型數(shù)據(jù)占2字節(jié);int型數(shù)據(jù)和float型數(shù)據(jù)占
3、4個(gè)字節(jié);double型數(shù)據(jù)占8個(gè)字節(jié);型數(shù)據(jù)占1個(gè)字節(jié);指針型變量占4個(gè)字節(jié)。一般情況下,我們?cè)诔绦蛑兄恍枰赋鲎兞棵?,無需知道每個(gè)變量在內(nèi)存中的具體地址,每個(gè)變量與其對(duì)應(yīng)的內(nèi)存單元之間的聯(lián)系由C編譯系統(tǒng)來完成。我們?cè)诔绦蛑袑?duì)變量的存取操作,實(shí)際上是對(duì)與變量對(duì)應(yīng)的內(nèi)存單元的操作,這種直接按變量地址存取變量值的方式稱為變量的“直接存取方式”。如下圖所示。在C語(yǔ)言中,還可以定義一種特殊的變量,這種變量不是簡(jiǎn)單地存儲(chǔ)一個(gè)數(shù)值或字符,而是存放
4、某個(gè)內(nèi)存單元的內(nèi)存地址。這種變量我們稱為“指針變量”,它占用4個(gè)字節(jié)(兩個(gè)字節(jié)用來存放段地址,兩個(gè)字節(jié)用來存放段內(nèi)偏移地址)。指針變量當(dāng)然也有它自己的內(nèi)存地址。如下圖所示,我們定義一個(gè)指針型變量p,它自己的地址是(2002),若將變量a的內(nèi)存地址(1002)存放到變量p中。這時(shí)要訪問變量a所代表的存儲(chǔ)單元,就有兩種方法,一種是我們剛才講的“直接存取方式”,另外一種就是我們先找到變量p的地址(2002),從中取出a的地址(1002),然后
5、再去訪問以1002為首地址的存儲(chǔ)單元。這種通過變量p間接得到變量a的地址,然后再存取變量a的值的方式稱為“間接存取方式”。這種用來存放地址的變量稱為“指針變量”。在這種情況下,通常稱指針變量p指向了變量a,變量a是指針變量p所指的對(duì)象,它們之間的這種“指向”關(guān)系是通過地址建立的。intaintbfloatc101210131014101510201021102210231002p200210022002pa10021003除了給指針變量
6、賦地址值外,還可以為指針變量賦NULL值。例如:pi=NULL;NULL是在stdio.h頭文件中定義的預(yù)定義符,因此在使用NULL時(shí),應(yīng)該在程序的前面出現(xiàn)預(yù)定義行:#include。NULL的代碼為0,當(dāng)執(zhí)行以上的賦值語(yǔ)句后,稱pi為空指針。因?yàn)镹ULL的代碼為0,所以,以上語(yǔ)句等價(jià)于pi=’0’或p=0這時(shí),指針p并不是指向地址為0的存儲(chǔ)單元,它不指向任何地方。而是具有一個(gè)確定的值——“空”,任何類型的指針都可賦予該值。企圖通過一個(gè)
7、空指針去訪問一個(gè)存儲(chǔ)單元時(shí),將會(huì)得到一個(gè)出錯(cuò)信息。8.4對(duì)指針變量的操作8.4.1通過指針來引用一存儲(chǔ)單元C語(yǔ)言提供了一個(gè)稱作“間接訪問運(yùn)算符”(也稱為間址運(yùn)算符)的單目運(yùn)算符“”。當(dāng)一個(gè)指針變量中存放了一個(gè)確切的地址時(shí),就可以通過間址運(yùn)算符“”來訪問該地址的存儲(chǔ)單元。例如:a是一個(gè)變量,intpi=NULLpj=pi=pjprintf(“%d%dn“ij)printf(“%d%dn“pipj)printf(“%d%dn“pipj)再如
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
評(píng)論
0/150
提交評(píng)論