《計(jì)算機(jī)程序設(shè)計(jì)(C語(yǔ)言)》第9章 第1節(jié) 指針的定義與賦值_第1頁(yè)
《計(jì)算機(jī)程序設(shè)計(jì)(C語(yǔ)言)》第9章 第1節(jié) 指針的定義與賦值_第2頁(yè)
《計(jì)算機(jī)程序設(shè)計(jì)(C語(yǔ)言)》第9章 第1節(jié) 指針的定義與賦值_第3頁(yè)
《計(jì)算機(jī)程序設(shè)計(jì)(C語(yǔ)言)》第9章 第1節(jié) 指針的定義與賦值_第4頁(yè)
《計(jì)算機(jī)程序設(shè)計(jì)(C語(yǔ)言)》第9章 第1節(jié) 指針的定義與賦值_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第九章指針與結(jié)構(gòu)體9.1指針的定義與賦值9.1指針的定義與賦值9.1.1指針與變量的地址9.1.2指針變量的定義9.1.3指針變量的賦值9.1.4指針變量的引用9.1.1指針與變量的地址

變量的本質(zhì)是代表內(nèi)存中的某個(gè)存儲(chǔ)單元。不同類(lèi)型的變量占據(jù)不同數(shù)量的存儲(chǔ)單元,每個(gè)單元所占存儲(chǔ)空間為1個(gè)字節(jié),每一個(gè)字節(jié)都有一個(gè)編號(hào),這個(gè)編號(hào)被稱(chēng)為地址,存放變量的第一個(gè)字節(jié)存儲(chǔ)單元的地址就是變量的地址。圖9-1-2(2)表示:這種“指向”關(guān)系是通過(guò)地址建立的,圖中的只是一種示意,形似“指針”。用來(lái)存放指針地址的變量就稱(chēng)作“指針變量”。上述變量p就是一個(gè)指針變量。所以“變量p指向了變量x”的含義就是變量p中存放了變量x的地址。xp202010261026102720201026p圖9-1-2(1)(2)9.1.2指針變量的定義指針變量定義的一般形式如下:類(lèi)型名*指針變量名1,*指針變量名2,…;如:

int*p,*q;

說(shuō)明了p和q是兩個(gè)指向整型(int類(lèi)型)變量的指針,也就是說(shuō)變量p和q中只能存放int類(lèi)型變量的地址,這里我們稱(chēng)int是指針變量p和q的“基類(lèi)型”。9.1.3指針變量的賦值1、通過(guò)求地址運(yùn)算(&)獲得地址值“&”:是單目運(yùn)算符,用來(lái)求運(yùn)算對(duì)象的地址,利用求地址運(yùn)算可以把一個(gè)變量的地址賦給指針變量?!纠?.2】

intk=1,*q,*p;q=&k;說(shuō)明:(1)例9.2中把k的地址賦給了q,即q指向變量k。(2)求地址運(yùn)算符&只能應(yīng)用于變量和數(shù)組元素,不可以用于表達(dá)式、常量和被說(shuō)明為register的變量。所以表達(dá)式q=&(k+1)是錯(cuò)誤的。(3)&必須放在運(yùn)算對(duì)象的左邊,而且運(yùn)算對(duì)象的類(lèi)型必須與指針變量的基類(lèi)型相同。2、通過(guò)指針變量獲得地址值可以通過(guò)賦值運(yùn)算,把一個(gè)指針變量中的地址值賦給另一個(gè)指針變量,從而使這兩個(gè)指針變量指向同一地址?!纠?.3】intk=1,*q,*p;q=&k;p=q;

例9.3使指針變量p中也存放了變量k的地址,也就是說(shuō)指針變量p和q都指向了變量k。(注意:當(dāng)對(duì)指針變量和指針變量進(jìn)行賦值時(shí),賦值號(hào)兩邊指針變量的基類(lèi)型必須相同。)*3、通過(guò)標(biāo)準(zhǔn)函數(shù)獲得地址值可以通過(guò)調(diào)用庫(kù)函數(shù)malloc和calloc在內(nèi)存中開(kāi)辟動(dòng)態(tài)存儲(chǔ)單元,并把所開(kāi)辟的動(dòng)態(tài)存儲(chǔ)單元的地址賦給指針變量。4、給指針變量賦“空”值指針變量還可以被賦為空值(NULL),形如:p=NULL;產(chǎn)生一個(gè)空指針p。等價(jià)于:p=′\0′;或p=0;此時(shí)指針p并不是指向地址為0的存儲(chǔ)單元,而是具有一個(gè)確定的值——“空”。當(dāng)用一個(gè)空指針去訪問(wèn)一個(gè)存儲(chǔ)單元時(shí),將會(huì)得到一個(gè)出錯(cuò)信息。9.1.4指針變量的引用間接訪問(wèn)運(yùn)算符*,引用指針變量時(shí)的*與定義指針變量時(shí)的*不同,定義時(shí)*只是表示其后的變量是指針變量,而引用時(shí)則表示指針變量所指向的存儲(chǔ)單元的內(nèi)容。如:

int*p,a=10;p=&a;*p=20;此時(shí)*p代表是a變量的存儲(chǔ)單元,則變量a的值變?yōu)?0。通過(guò)指針來(lái)引用一個(gè)存儲(chǔ)單元:當(dāng)指針變量中存放了一個(gè)確定的地址值時(shí),可以用“間接訪問(wèn)運(yùn)算符”(*)來(lái)引用相應(yīng)的存儲(chǔ)單元?!纠?.6】

int*p,x=20,y;p=&x;y=*p;例9.6的作用是將p所指存儲(chǔ)單元x的內(nèi)容(整數(shù)20)賦予給y;這里*p代表p所指向的變量x(此處的*號(hào)是單目運(yùn)算符——“間接訪問(wèn)運(yùn)算符”,簡(jiǎn)稱(chēng)“間址運(yùn)算符”)。例9.6中的語(yǔ)句y=*p;和語(yǔ)句y=x;是等價(jià)的。當(dāng)利用指針來(lái)引用一個(gè)存儲(chǔ)單元時(shí),“*指針變量”也可以置于賦值號(hào)的左邊,代表的是該指針?biāo)傅拇鎯?chǔ)單元?!纠?.7】

(1)int*p,k=0;

(2)p=&k;

(3)*p=20;

(4)*p=*p+1;語(yǔ)句(3)的作用是把整數(shù)20存放在變量k中,等價(jià)于語(yǔ)句k=20;語(yǔ)句(4)的作用是取指針變量p所指向的存儲(chǔ)單元中的值,加1后再放入p所指向的存儲(chǔ)單元中,也就是讓變量k中的值增加1而變成21??梢钥闯?,當(dāng)*p出現(xiàn)在賦值號(hào)左邊時(shí),代表的是指針?biāo)傅拇鎯?chǔ)單元(相當(dāng)于對(duì)應(yīng)的變量);當(dāng)*p出現(xiàn)在賦值號(hào)右邊時(shí),代表的是指針?biāo)傅拇鎯?chǔ)單元的內(nèi)容(相當(dāng)于變量中的內(nèi)容)。

所以語(yǔ)句(4)還可寫(xiě)成:*p+=1;或++*p;或(*p)++;【例9.8】對(duì)由鍵盤(pán)輸入的三個(gè)變量a,b,c的值進(jìn)行升序排序并輸出(要求:用三指針指向三個(gè)變量)。#include<stdio.h>voidmain(){int

a,b,c,x;

int*pa,*pb,*pc,*px;pa=&a;pb=&b;pc=&c;

px=&x;

scanf("%d,%d,%d",pa,pb,pc);//分別向pa、pb、pc所指存儲(chǔ)單元輸入數(shù)據(jù)

printf("before

a,b,c:%d\t%d\t%d\n",a,b,c);//輸出并驗(yàn)證a、b、c中的值

if(*pa>*pb)//若a的值大于b的值,則交換a、b的值{*px=*pa;*pa=*pb;*pb=*px;}if(*pa>*pc)//若a的值大于c的值,則交換a、c的值{*px=*pa;*pa=*pc;*pc=*px;}if(*pb>*pc)//若b的值大于c的值,則交換b、c的值{*px=*pb;*pb=*pc;*pc=*px;}printf("after

a,b,c:%d\t%d\t%d\n",a,b,c

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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)論