C語(yǔ)言中的指針_第1頁(yè)
C語(yǔ)言中的指針_第2頁(yè)
C語(yǔ)言中的指針_第3頁(yè)
C語(yǔ)言中的指針_第4頁(yè)
C語(yǔ)言中的指針_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

會(huì)計(jì)學(xué)1C語(yǔ)言中的指針10.1指針的概念一、內(nèi)存的訪問方式1、直接訪問(通過變量名對(duì)內(nèi)存單元進(jìn)行存取操作。)200020022004ijk

3

6

9

:

內(nèi)存用戶數(shù)據(jù)區(qū)::如:i=2,j=6,k=9printf(“%d”,i);該輸出語(yǔ)句是這樣執(zhí)行的:根據(jù)變量名與地址的對(duì)應(yīng)關(guān)系(該關(guān)系在編譯時(shí)確定),找到變量的地址2000,然后將從2000開始的兩個(gè)字節(jié)的內(nèi)容(即3)取出后輸出。第1頁(yè)/共19頁(yè)10.1指針的概念2000200220043010ijki_p

3

6

92000

:

內(nèi)存用戶數(shù)據(jù)區(qū)::2、間接訪問將變量i的地址存放在另一個(gè)變量中。假設(shè)變量i_p用來(lái)存放整型變量的地址,它被分配3010、3011兩個(gè)字節(jié),可用下例語(yǔ)句將i的地址存放到i_p中。

i_p=&i;即i-p中的的值為2000此時(shí),要存取變量的值,可以先找到存放“i”地址的變量i_p,從中取出i的地址(2000),然后到2000,2001字節(jié)取出i的值3。第2頁(yè)/共19頁(yè)兩個(gè)概念:(1)指針──即地址

一個(gè)變量的地址稱為該變量的指針。通過變量的指針能夠找到該變量。(2)指針變量──專門用于存儲(chǔ)其它變量地址的變量指針變量i_p的值就是變量i的地址。10.1指針的概念第3頁(yè)/共19頁(yè)變量的指針就是變量的地址,存放變量地址的變量就是指針變量。為表示指針變量和它指向的變量之間的關(guān)系,用指針運(yùn)算符“*”表示。即:*(i_p)就是i_p所指向的變量。10.2變量的指針和指向變量的指針變量20003i_p*(i_p)i因此,下面兩個(gè)語(yǔ)句的作用相同:①i=3; /*將3直接賦給變量i*/②i_p=&i;/*使i_p指向i*/*i_p=3;/*將3賦給指針變量i_p所指向的變量*/第4頁(yè)/共19頁(yè)10.2變量的指針和指向變量的指針變量1、指針變量的定義一般形式:類型標(biāo)識(shí)符

*變量名如:int*p1;char*p2;float*p3;說明:*表示該變量為指針型變量,指針變量名為p1,p2,p3定義指針變量時(shí)必須指定基類型。它表示指針變量中存放的地址所指向的是什么類型的數(shù)據(jù)。給指針變量賦值:如:p1=&i(將i的地址賦給p1)注:一般不直接賦數(shù)值第5頁(yè)/共19頁(yè)2、指針變量的引用用指針變量對(duì)變量賦值:如:inti,j,*p;p=&i;*p=3;j=*p+2;注意:p是地址變量,而*p是非地址變量,與i是一回事。“*”:為指針運(yùn)算符或叫指向運(yùn)算符、間接運(yùn)算符。定義后p=&I后*p=3后Ijp::::100010021004Ijp100010021004Ijp100010021004Ijp100031000100010021004j=*p+2后351000第6頁(yè)/共19頁(yè)例10.1通過指針變量訪問整型變量

main()

{inta,b;int*pointer_1,*pointer_2;

a=100;b=10;

pointer_1=&a;/*把變量a的地址賦給pointer_1*/

pointer_2=&b;/*把變量b的地址賦給pointer_2*/

printf(”%d,%d\n”,a,b);printf(”%d,%d\n”,*pointer_1,*pointer_2);}*pointer_1=&a對(duì)嗎?

運(yùn)行結(jié)果為:

100,10100,10第7頁(yè)/共19頁(yè)關(guān)于運(yùn)算符&和*的幾點(diǎn)說明:(1)結(jié)合性&和*兩運(yùn)算符的優(yōu)先級(jí)相同,但結(jié)合方向?yàn)樽杂蚁蜃笕纾篿nta,b,*p1,*p2;p1=&a;p2=&b;&*p1的含義?

&*p1相當(dāng)于&(*p1),等于&(*p1)=&(a)=&a=p1*&a的含義?*&a相當(dāng)于*(&a)=*(p1)=a(2)優(yōu)先級(jí)處于第二位(見附錄)第8頁(yè)/共19頁(yè)(3)自增自減運(yùn)算如:inta,b,*p;p=&a;a=3;b=5;(*p)++:相當(dāng)于a++

,a=4*p++:相當(dāng)于*(p++),先求*P的值(為3),然后P再++,若p原為1000,則p++為1002,即P不再指向a了。若floata,*p;p=&a;

當(dāng)p為1000,則p++為1004第9頁(yè)/共19頁(yè)例10.2輸入a和b兩個(gè)整數(shù),按先大后小的順序輸出a和b。

main()

{int*p1,*p2,*p,a,b;

scanf("%d,%d“,&a,&b);

p1=&al;p2=&b;if(a<b){p=p1;pl=p2;p2=p;}printf("\na=%d,b=%d\n”,a,b);

printf("max=%d,min=%d\n“,*pl,*p2);

}

運(yùn)行情況如下:輸入5,9回車,輸出結(jié)果?

a=5,b=9max=9,min=5第10頁(yè)/共19頁(yè)交換地址(指針變量),使p1指向大數(shù)b,而變量a、b未變。&a&b59&b5&a9p1ap2bppp1ap2b第11頁(yè)/共19頁(yè)3、指針變量作為函數(shù)參數(shù)功能:將一個(gè)變量的地址傳送到另一函數(shù)中,實(shí)參和形參均用指針。例10.3即對(duì)輸入的兩個(gè)整數(shù)按大小順序輸出(用函數(shù)處理)。

運(yùn)行情況如下:輸入:5,9回車輸出:9,5voidswap(int*p1,*p2){intp;

p=*p1;*p1=*p2;*p2=p;}voidmain(){inta,b;int*pointer_1,*pointer_2;

scanf("%d,%",&a,&b);pointer_1=&a;pointer_2=&b;if(a<b)swap(pointer_1,pointer_2);

printf("\n%d,%d\n"a,b);

}第12頁(yè)/共19頁(yè)函數(shù)調(diào)用過程第13頁(yè)/共19頁(yè)下面例子能不能正確交換數(shù)據(jù)?

voidswap(pl,p2)

int*p1,*p2;{int*p;

p=pl;p1=p2;p2=p;

voidmain()

{inta,b;int*pointer_1,*pointer_2;

scanf(”%d%d",&a,&b);

pointer_l=&a;pointer_2=&b;

if(a<b)swap(pointer_l,pointer_2);

printf(”\n%d,%d\n”,*pointer_1,*pointer_2);

}第14頁(yè)/共19頁(yè)出錯(cuò)的原因是參量不是雙向傳遞。&a&b59&a&b59&b5&b5&a9&a9Pointer_1ap1ap1apointer_1apointer_2bp2bp2bpointer_2b(a)(b)(c)(d)&a&b第15頁(yè)/共19頁(yè)如果想通過函數(shù)調(diào)用得到n個(gè)要改變的值,可以用如下方法:在主調(diào)函數(shù)中設(shè)n個(gè)變量,用n個(gè)指針變量指向他們;然后將指針變量作實(shí)參,將這n個(gè)變量的地址傳給所調(diào)用的函數(shù)的形參通過形參指針變量,改變?cè)搉個(gè)變量的值;主調(diào)函數(shù)中就可以使用這些改變了值的變量。第16頁(yè)/共19頁(yè)例10.4輸入a、b、c三個(gè)整數(shù),按大小順序輸出。(P228)

swap(int*

pt1,int*

pt2){intp;p=*pt1;*pt1=*pt2;*pt2=p;}exchange(int*

q1,int*

q2,int*

q3){if(*q1<*q2)swap(q1,q

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)網(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)論