資源描述:
《《C語(yǔ)言程序設(shè)計(jì)》第5章指針》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、第五章指針Pointer5.1指針的基本概念指針是C語(yǔ)言的重要特征,是C語(yǔ)言訪(fǎng)問(wèn)內(nèi)存數(shù)據(jù)和程序的靈活和有效的手段。C語(yǔ)言的指針支持:⑴函數(shù)的地址調(diào)用;⑵動(dòng)態(tài)分配內(nèi)存;⑶數(shù)組的地址引用。⒈內(nèi)存、地址、指針(Memory,Address,Pointer)內(nèi)存存放了計(jì)算機(jī)正在運(yùn)行的程序和程序正在使用的數(shù)據(jù)。內(nèi)存的基本單元是字節(jié)(Byte)。為了訪(fǎng)問(wèn)內(nèi)存單元,CPU給每個(gè)內(nèi)存單元一個(gè)編號(hào),該編號(hào)稱(chēng)為該內(nèi)存單元的地址。變量是程序中可以改變的量,當(dāng)說(shuō)明變量時(shí),系統(tǒng)將為其在內(nèi)存中開(kāi)辟相應(yīng)得內(nèi)存單元。由此確定變量的地址及內(nèi)存中的表示方式。2000H2001H2002H2003H
2、inta=0;a的內(nèi)存單元a的地址&a如果有一變量p,其內(nèi)容存放了a的地址&a,通過(guò)p也可實(shí)現(xiàn)對(duì)a的訪(fǎng)問(wèn),p稱(chēng)為指針,并指向a。00H20H00p⒉指針的說(shuō)明指針是特殊類(lèi)型的變量,其內(nèi)容是變量的地址。在使用前必須說(shuō)明,說(shuō)明某標(biāo)識(shí)符是指針類(lèi)型,并可指向某種類(lèi)型的對(duì)象。指針的說(shuō)明格式:type*pname1,…*pnamen;標(biāo)識(shí)符命名的指針變量名。指針標(biāo)志。指針指向?qū)ο蟮念?lèi)型。int*p,*q;/*p、q是指向整型變量的指針。*/float*pfValue,*pf;/*pfValue和pf是指向浮點(diǎn)型的指針。*/⒊指針對(duì)變量的引用定義指針的目的是通過(guò)指針引用內(nèi)存對(duì)
3、象,指針的引用應(yīng)按如下步驟進(jìn)行:⑴說(shuō)明指針inta=0,*p;⑵指針指向?qū)ο髉=&a;⑶通過(guò)指針引用對(duì)象*p=*p+2;4.指針操作的兩種運(yùn)算符:取地址運(yùn)算&&a表示取變量a地址的運(yùn)算。間接運(yùn)算**p表示取指針p指向變量?jī)?nèi)容的運(yùn)算。inta,*p;2000Happ=&a;/*p指向a。*/2000H*p=2;2舉例:#includevoidmain(void){intx,*p;x=55;p=&x;printf(“%d,%u”,x,*p);*p=65;printf(“%d,%u”,x,*p);}2000Hxp2000H5565關(guān)于指針的說(shuō)明:⑴指
4、針必須指向?qū)ο蠛?,才能引用。int*p;*p=2;/*Error!*/⑵&和*為互補(bǔ)運(yùn)算。inta,*p;p=&a;則:&*p?p*&a?a【例5-1】/*example5-1指針訪(fǎng)問(wèn)簡(jiǎn)單變量示例*/#includevoidmain(void){inta,b,*p1,*p2;p1=&a;/*p1指向a*/p2=&b;/*p2指向b*/scanf("%d%d",p1,&b);printf("a+b=%d",*p1+*p2);}5。指針的運(yùn)算指針是特殊類(lèi)型的變量,其內(nèi)容是變量的地址,因此指針的運(yùn)算及結(jié)果一定要符合地址邏輯。⑴五種算術(shù)運(yùn)算inta
5、,b,*p1,*p2;p1=&a;p2=&b;a2000Hb2400Hp1p22000H2400Hp1++;/*含義指向a后的整型單元*/2002H2002Hp1--;/*指向a前的整型單元*/p1+n;/*指向a后的第n個(gè)整型單元*/p1-n;/*指向a前的第n個(gè)整型單元*/p2-p1;/*a和b之間差的單元數(shù)*/結(jié)果200Hp±n相當(dāng)于:p的實(shí)際內(nèi)容±n?sizeof(*p);⑵六種關(guān)系運(yùn)算比較兩個(gè)同類(lèi)型變量之間的地址關(guān)系。p1>p2;指針賦值運(yùn)算#includevoidmain(void){inta,b,*p1,*p2;a=2;b=3;p
6、1=&a;p2=&b;*p1=*p2;printf(“%d,%d”,a,b);a=3;b=5;p1=p2;printf(“%d,%d”,*p1,*p2);}差別a&a2000Hb&b2400Hp1p2232000H2400H5.2指針與數(shù)值型數(shù)組數(shù)組是同類(lèi)型的變量的集合,各元素按下標(biāo)的特定順序占據(jù)一段連續(xù)的內(nèi)存,各元素的地址也連續(xù),指針對(duì)數(shù)組元素非常方便。⒈指針與一維數(shù)組通過(guò)指針引用數(shù)組元素可以分以下三個(gè)步驟:⑴說(shuō)明指針和數(shù)組int*p,a[10];⑵指針指向數(shù)組p=a;/*指向數(shù)組的首地址*/p=&a[0];/*指向數(shù)組的首地址*/⑶通過(guò)指針引用數(shù)組元素當(dāng)
7、指針指向數(shù)組的首地址時(shí),則下標(biāo)為i的元素地址為:p+i或a+i引用數(shù)組元素可以有三種方法:下標(biāo)法:a[i]指針?lè)ǎ?(p+i)數(shù)組名法:*(a+i)注意:數(shù)組名是地址常量,不能改變!a=p;/*Error!*//*example5-2通過(guò)指針訪(fǎng)問(wèn)數(shù)組元素*/#includevoidmain(void){doubledArray[10],dAvge,*dPointer;inti;dAvge=0;dPointer=dArray;/*指針指向數(shù)組*/for(i=0;i<10;i++){scanf("%lf",dPointer+i);/*dPointe
8、r+i為下標(biāo)為i的元素地