九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

歡迎來(lái)到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁(yè) 裝配圖網(wǎng) > 資源分類(lèi) > PPT文檔下載  

《C語(yǔ)言程序設(shè)計(jì)》第5章指針.ppt

  • 資源ID:11498721       資源大?。?span id="24d9guoke414" class="font-tahoma">2.98MB        全文頁(yè)數(shù):45頁(yè)
  • 資源格式: PPT        下載積分:9.9積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開(kāi)放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要9.9積分
郵箱/手機(jī):
溫馨提示:
用戶(hù)名和密碼都是您填寫(xiě)的郵箱或者手機(jī)號(hào),方便查詢(xún)和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開(kāi),此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁(yè)到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無(wú)水印,預(yù)覽文檔經(jīng)過(guò)壓縮,下載后原文更清晰。
5、試題試卷類(lèi)文檔,如果標(biāo)題沒(méi)有明確說(shuō)明有答案則都視為沒(méi)有答案,請(qǐng)知曉。

《C語(yǔ)言程序設(shè)計(jì)》第5章指針.ppt

第五章指針Pointer,5.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)存中的表示方式。,2000H,2001H,2002H,2003H,inta=0;,a的內(nèi)存單元,a的地址,標(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ì)象,指針的引用應(yīng)按如下步驟進(jìn)行:,說(shuō)明指針,inta=0,*p;,指針指向?qū)ο?p=,通過(guò)指針引用對(duì)象,*p=*p+2;,4.指針操作的兩種運(yùn)算符:,取地址運(yùn)算,2000H,a,p,p=/*p指向a。*/,2000H,*p=2;,2,舉例:,#includevoidmain(void)intx,*p;x=55;p=,2000H,x,p,2000H,55,65,關(guān)于指針的說(shuō)明:,指針必須指向?qū)ο蠛?,才能引用?int*p;*p=2;/*Error!*/,p=則:p1=,5。指針的運(yùn)算,指針是特殊類(lèi)型的變量,其內(nèi)容是變量的地址,因此指針的運(yùn)算及結(jié)果一定要符合地址邏輯。,五種算術(shù)運(yùn)算,inta,b,*p1,*p2;p1=,a,2000H,b,2400H,p1,p2,2000H,2400H,p1+;/*含義指向a后的整型單元*/,2002H,2002H,p1-;/*指向a前的整型單元*/,p1+n;/*指向a后的第n個(gè)整型單元*/,p1-n;/*指向a前的第n個(gè)整型單元*/,p2-p1;/*a和b之間差的單元數(shù)*/,結(jié)果200H,pn相當(dāng)于:p的實(shí)際內(nèi)容nsizeof(*p);,六種關(guān)系運(yùn)算,比較兩個(gè)同類(lèi)型變量之間的地址關(guān)系。,p1>p2;,指針賦值運(yùn)算,#includevoidmain(void)inta,b,*p1,*p2;a=2;b=3;p1=,差別,a,指針指向數(shù)組,p=a;/*指向數(shù)組的首地址*/p=/*指向數(shù)組的首地址*/,通過(guò)指針引用數(shù)組元素,當(dāng)指針指向數(shù)組的首地址時(shí),則下標(biāo)為i的元素地址為:p+i或a+i,引用數(shù)組元素可以有三種方法:,下標(biāo)法:ai指針?lè)ǎ?(p+i)數(shù)組名法:*(a+i),注意:數(shù)組名是地址常量,不能改變!,a=p;/*Error!*/,/*example5-2通過(guò)指針訪(fǎng)問(wèn)數(shù)組元素*/#includevoidmain(void)doubledArray10,dAvge,*dPointer;inti;dAvge=0;dPointer=dArray;/*指針指向數(shù)組*/for(i=0;i<10;i+)scanf("%lf",dPointer+i);/*dPointer+i為下標(biāo)為i的元素地址*/dAvge+=*(dPointer+i);/*累加各個(gè)元素的值*/dAvge/=10;printf("Theavgerageofarrayis:%lfn",dAvge);,【例5-2】有一個(gè)具有10個(gè)元素的雙精度數(shù)組,通過(guò)指針求其所有元素的平均值。,/*example5-3通過(guò)指針求數(shù)組元素最大值及其位置*/#includevoidmain(void)intiArray10,*ipCur;/*ipCur遍歷訪(fǎng)問(wèn)數(shù)組的指針*/int*ipPos;/*ipPos最大元素地址*/inti;ipCur=iArray;/*指針指向數(shù)組*/for(i=0;i<10;i+)scanf("%d",ipCur+);/*ipCur為下標(biāo)為i的數(shù)組元素的地址*/ipPos=iArray;/*指向數(shù)組首地址*/*設(shè)下標(biāo)為0的元素為最大值*/ipCur=iArray+1;,【例5-3】通過(guò)指針求數(shù)組的最大值及其位置。,for(i=1;i*ipPos)ipPos=ipCur;/*ipPos保存最大元素的地址*/ipCur+;/*指向下一元素*/printf("Themaxis%dn",*ipPos);printf("Thepositionis%dn",ipPos-iArray);,舉例:打印數(shù)組中的奇數(shù)。,#includevoidmain(void)inti,a10;for(i=0;i<10;i+)scanf(“%d”,數(shù)組元素法。,循環(huán)輸入。,循環(huán)判斷,滿(mǎn)足條件輸出。,數(shù)組名法。,a+i,*(a+i),指針?lè)ā?*p;,p=a;,p+,*(p+i),結(jié)果是否正確?,p=a;*p=*,注意指針在運(yùn)算時(shí)的變化。,2.指針與二維數(shù)組,如下說(shuō)明數(shù)組inta34=1,2,3,4,5,6,7,8,9,10,11,12;,其二維結(jié)構(gòu)如下:,行,列,為了便于索引,C語(yǔ)言將數(shù)組分為兩級(jí)管理。,a0,a1,a2,將a理解為一維數(shù)組,數(shù)組有三個(gè)元素,它們分別為a0、a1,a2。各個(gè)元素又是一個(gè)有四個(gè)元素的一維數(shù)組。,從地址的角度看:a為a0第一行的首地址a+1為a1第二行的首地址a+2為a2第三行的首地址,a+1地址一次加一行。,i行j列數(shù)組元素的地址可以由ai+j得到。,數(shù)組名地址的兩級(jí)管理,a,a0,a1,a2,a00a01a02a03,a10a11a12a13,a20a21a22a23,等價(jià)地址及其管理方式,數(shù)組名是數(shù)組的地址,而且是常量,*運(yùn)算不改變其值!,以下三種地址等價(jià):,a+i,*(a+i),ai,加法按行遞增,加法按列遞增,(a+1)+1,*(a+1)+1,差別?,數(shù)組名表示數(shù)組元素,aij,(*(a+i)j,*(*(a+i)+j),*(ai+j),指針與二維數(shù)組,int*p,a34;p=a;aij*(p+4*i+j)等價(jià)!,a00,a,a01,a02,a0,a10,a11,a12,a1,a20,a21,a22,a2,a+1,a1+2,/*example5-4求二維數(shù)組最小值及其位置*/#includevoidmain(void)inta34,i,j;intiMinRow,iMinCol;/*iMinRow最小值的行,iMinCol最小值的列*/for(i=0;i<3;i+)for(j=0;j<4;j+)scanf("%d",ai+j);/*ai+j為i行j列元素的地址*/iMinRow=0;iMinCol=0;/*假定a00為最小值*/for(i=0;i<3;i+)for(j=0;j<4;j+)if(*(*(a+i)+j)<aiMinRowiMinCol)iMinRow=i;iMinCol=j;/*修正i和j為新的最小值下標(biāo)*/printf("Theminisa%d%d=%dn",iMinRow,iMinCol,aiMinRowiMinCol);,【例5-4】輸入三行四列的整型數(shù)組,求最小值及其位置。,/*example5-5通過(guò)指針求二維數(shù)組元素的累加和*/#includevoidmain(void)inti,j,a23,sum;int*p;p=(int*)a;/*p指向數(shù)組a,由于a加1加1行,轉(zhuǎn)換為整型指針*/for(i=0;i<2;i+)for(j=0;j<3;j+)scanf(“%d”,ai+j);/*ai+j為i行j列元素的地址*/sum=0;for(i=0;i<2;i+)for(j=0;j<3;j+)sum+=*(p+i*3+j);/*通過(guò)指針p表示aij*/printf("Thesumofa=%dn",sum);,【例5-5】輸入兩行三列的整型數(shù)組,通過(guò)指針求所有元素的累加和。,舉例:在數(shù)組a中查找輸入的數(shù),輸出行列位置。,#includevoidmain(void)inta34=1,2,3,4,5,6,7,8,9,10,11,12;inti,j,iS;int*p;p=a;scanf(“%d”,下標(biāo)法。,*(ai+j),*(*(a+i)+j),*(p+4*i+j),【例5-6】輸入3行4列的浮點(diǎn)型數(shù)組,通過(guò)指針求數(shù)組的平均值。,/*example5-6通過(guò)指針求二維數(shù)組的平均值*/#includevoidmain(void)inti,j;floata34,fAvg;float(*p)4;p=a;/*指針指向數(shù)組*/fAvg=0;for(i=0;i<3;i+)for(j=0;j=a,【例5-8】輸入字符串,將其中小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)字符,其余的字符不變,輸出結(jié)果。,舉例:將字符串中的大寫(xiě)字母轉(zhuǎn)化對(duì)應(yīng)的小寫(xiě)字母。,#includevoidmain(void)char*p,s80;p=s;gets(p);for(;*p!=0;p+)if(*p>=A,舉例:將無(wú)符號(hào)的八進(jìn)制字符串轉(zhuǎn)換為十進(jìn)制整數(shù)。,#includevoidmain(void)char*p,s6;inti,n=0;p=s;gets(p);for(;*p!=0;p+)n=n*8+*p-0;printf(“%dn”,n);,p指向s數(shù)組。,輸入字符串。,s,p,s,5,5,6,0,n=0*8+5-05,n=5*8+5-045,n=45*8+6-0366,思考題:將4位十六進(jìn)值字符串轉(zhuǎn)化為十進(jìn)制字符串。,5.4指針數(shù)組和指向指針的指針,指針是存放其它數(shù)據(jù)對(duì)象地址的變量。因此,指針可以構(gòu)成數(shù)組。每個(gè)數(shù)組元素為一個(gè)指針變量,且在內(nèi)存中連續(xù)存放。,指針數(shù)組的說(shuō)明,說(shuō)明格式:type*數(shù)組名constexp;,int*p4;,含義是在內(nèi)存中開(kāi)辟空間,并指明元素所指向的對(duì)象的類(lèi)型。,數(shù)組名p為數(shù)組的地址。,使用前必須讓各元素指向?qū)ο蟆?inti,a34,*p3;for(i=0;i<3;i+)pi=ai;*(p2+1)=2;/*通過(guò)指針數(shù)組引用數(shù)組元素a21*/,/*example5-9通過(guò)指針數(shù)組訪(fǎng)問(wèn)二維數(shù)組*/#includevoidmain(void)inta34;int*p3;/*說(shuō)明行數(shù)相同的指針數(shù)組*/inti,j;intiSumOfPosi,iCountOfPosi;for(i=0;i<3;i+)pi=ai;/*指針數(shù)組元素指向?qū)?yīng)的行*/for(j=0;j<4;j+)scanf("%d",pi+j);iSumOfPosi=0;iCountOfPosi=0;,【例5-9】統(tǒng)計(jì)3行4列整型二維數(shù)組中正數(shù)的個(gè)數(shù),并求正數(shù)的累加和,輸出結(jié)果。,for(i=0;i0)iSumOfPosi+=*(pi+j);/*通過(guò)指針數(shù)組訪(fǎng)問(wèn)二維數(shù)組*/iCountOfPosi+;printf("Thesumofposi-numbinarrayis%dn",iSumOfPosi);printf("Thenumberofposi-numbinarrayis%dn",iCountOfPosi);,指針數(shù)組的應(yīng)用舉例,指針數(shù)組與多維數(shù)組,通過(guò)指針數(shù)組按數(shù)學(xué)方式輸出數(shù)組的值。,#includevoidmain()inti,j;inta34=1,2,3,4,5,6,7,8,9,10,11,12;int*p3;p0=a0;p1=a1;p2=a2;for(i=0;i<3;i+)for(j=0;j<4;j+)printf(“%5d”,*(pi+j);printf(“n”);,p0,數(shù)組a的二維結(jié)構(gòu),p1,p2,a0,a1,a2,每輸出一行,打印回車(chē)。,/*example5-10通過(guò)指針數(shù)組訪(fǎng)問(wèn)二維字符數(shù)組*/#include#includevoidmain(void)charstrName510,*strP5,*strTemp=NULL;inti,j;for(i=0;i0)/*比較*/,【例5-10】對(duì)存放于二維字符數(shù)組中的五個(gè)字符串按由小到大排序輸出。,strTemp=strPi;strPi=strPj;strPj=strTemp;printf("Theresultaftersort:n");for(i=0;i<5;i+)puts(strPi);/*輸出*/,指針數(shù)組與多字符串,通過(guò)指針數(shù)組構(gòu)成的菜單,執(zhí)行DOS命令。,#includevoidmain(void)char*command=“dir”,“time”,“date”,ch;for(;)doprintf(“1:directoryn”);printf(“2:settimen”);printf(“3:setdaten”);printf(“4:quitn”);printf(nselection:”);ch=getchar();printf(“n”);while(ch4);if(ch=4)break;system(commandch-1);,內(nèi)層循環(huán)輸入選項(xiàng),外層循環(huán)根據(jù)選項(xiàng)執(zhí)行命令,執(zhí)行系統(tǒng)命令函數(shù),如:system(“dir”);,3-12,【例5-11】輸入0到6的數(shù)字分別代表周日到周六,輸出英文名稱(chēng)。,/*example5-11字符型指針數(shù)組與字符串常量*/#includevoidmain(void)char*strDay7=“Sunday”,“Monday”,“Tuesday”,"Wednesday","Thursday","Friday","Saturday"intiDay;scanf("%d",指向指針的指針,如果指針變量的內(nèi)容存放其它指針的地址,稱(chēng)該指針為指向指針的指針。,指向指針的指針的說(shuō)明:,形式:type*p;,int*p;,p是一個(gè)指向整形指針的指針。,#includevoidmain(void)intx,*p,*q;x=10;p=,p為指向整型的指針。,q為指向整型指針的指針。,x,p,q,2000H,3000H,10,2000H,3000H,指向指針的指針的應(yīng)用,指向指針的指針一般用于多維數(shù)組和指針數(shù)組的操作。,多維數(shù)組,#includevoidmain()inta34=1,2,3,4,5,6,7,8,9,10,11,12,;int*arr3=a0,a1,a2;inti,j,*p;p=arr;for(i=0;i<3;i+)for(j=0;i<4;j+)printf(“%5d”,*(*(p+i)+j);printf(“n”);,ai,aij,arr,arr,p,p+1,【例5-12】指向指針的指針的簡(jiǎn)單應(yīng)用。,/*example5-12通過(guò)指向指針的指針訪(fǎng)問(wèn)簡(jiǎn)單變量示例*/#includevoidmain(void)intx,*p,*q;/*說(shuō)明變量、指針、指向指針的指針*/x=20;p=/*引用指向的對(duì)象*/,/*example5-13通過(guò)指向指針的指針與指針數(shù)組訪(fǎng)問(wèn)二維數(shù)組*/#includevoidmain(void)inta34,*p3,*pp;/*說(shuō)明二維數(shù)組及與其行數(shù)相同的指針數(shù)組*/inti,j;floatiAvg;for(i=0;i<3;i+)pi=ai;/*指針數(shù)組元素指向?qū)?yīng)的行*/for(j=0;j<4;j+)scanf("%d",pi+j);pp=p;/*pp指向指針數(shù)組*/iAvg=0;for(i=0;i<3;i+)for(j=0;j<4;j+)iAvg+=*(*(pp+i)+j);/*通過(guò)pp訪(fǎng)問(wèn)aij*/printf("Theaverageofais%fn",iAvg/12);,【例5-13】通過(guò)指向指針的指針與指針數(shù)組,求二維數(shù)組的平均值。,用于處理多字符串,#includevoidmain(void)char*name=“one”,“two”,“three”,“four”;char*p;inti;for(i=0;i<4;i+)p=name+i;printf(“%sn”,*p);,p,name+i,指針的類(lèi)型問(wèn)題,通過(guò)指針可以訪(fǎng)問(wèn)基本類(lèi)型的變量及數(shù)組,指針的類(lèi)型是其指向數(shù)據(jù)的類(lèi)型,該類(lèi)型決定了指針邏輯加一時(shí)所加的物理字節(jié)數(shù)。,可以強(qiáng)制轉(zhuǎn)換指針的類(lèi)型,轉(zhuǎn)換方式為:,(type*)p,#includevoidmain()chara3,*p;inty;a0=0 x12;a1=0 x34;a2=0 x56;p=,&a0,p,相鄰單元轉(zhuǎn)化為一個(gè)整型單元。,chp5ex2,*p,指向void類(lèi)型的指針,void稱(chēng)為“空類(lèi)型”,void不能說(shuō)明變量。但可以用void說(shuō)明指針。當(dāng)用void說(shuō)明指針時(shí),指針?lè)Q為指向空類(lèi)型的指針,空類(lèi)型指針加1,地址移動(dòng)一個(gè)字節(jié)。也就是說(shuō)void指向的類(lèi)型是以物理字節(jié)為單位的內(nèi)存。,5.5程序代碼風(fēng)格,1.命名規(guī)范,標(biāo)識(shí)符是C語(yǔ)言的命名機(jī)制,標(biāo)識(shí)符可以對(duì)變量、數(shù)組、函數(shù)、結(jié)構(gòu)類(lèi)型、宏名等需要命名的數(shù)據(jù)命名。為了提高程序的可讀性,命名一般的規(guī)則如下:,(1)宏名宏名一般全部由大寫(xiě)字母構(gòu)成,以示與其他數(shù)據(jù)名字的區(qū)別,(2)函數(shù)名函數(shù)命名最好采用動(dòng)詞短語(yǔ)加名詞短語(yǔ),每個(gè)短語(yǔ)的首字符用大寫(xiě)表示。主要目的是盡可能在名字中描述函數(shù)實(shí)現(xiàn)的功能。,(3)變量名變量的名是程序中使用最多的名字,變量的命名應(yīng)盡可能的做到“見(jiàn)名知意”,也就是在命名中盡可能體現(xiàn)變量在程序中的作用,同時(shí)變量的名字中最好能體現(xiàn)變量的類(lèi)型。業(yè)界較為通行的是Windows程序員的規(guī)范,該規(guī)范是也稱(chēng)“匈牙利命名法”,是匈牙利人CharlesSimonyi提出的命名方式。該方式以小寫(xiě)字母構(gòu)成的前綴表示類(lèi)型,以一個(gè)或多個(gè)名詞短語(yǔ)表示變量的含義,每個(gè)名詞短語(yǔ)的首字符為大寫(xiě),表達(dá)式及語(yǔ)句風(fēng)格,1.表達(dá)式,表達(dá)式要盡量簡(jiǎn)單易讀,在程序中不要用過(guò)于復(fù)雜的表達(dá)式。,2.語(yǔ)句中的風(fēng)格在分支和循環(huán)的語(yǔ)句中,無(wú)論是否需要都加包含其語(yǔ)句。,3.空行在語(yǔ)句中加入適當(dāng)空行表示某個(gè)操作的結(jié)束,以增加程序的可讀性。,4.注釋在程序中加入注釋對(duì)于提高程序的可讀性、可調(diào)性、可維護(hù)性都是十分必要的,因此在程序關(guān)鍵算法、關(guān)鍵語(yǔ)句、關(guān)鍵位置都應(yīng)該加必要的注釋。,

注意事項(xiàng)

本文(《C語(yǔ)言程序設(shè)計(jì)》第5章指針.ppt)為本站會(huì)員(max****ui)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話(huà):18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶(hù)上傳的文檔直接被用戶(hù)下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!