




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第七章指針
1.指針與數(shù)組的關(guān)系2.指針與函數(shù)的關(guān)系§1.指針及定義一.
指針變量的定義指針變量:存放對(duì)象地址的變量.指針變量定義的基本形式:類(lèi)型說(shuō)明符*變量名;例:int*pi,*pj;/*pi,pj指向整型變量的指針變量*/float*p3;/*p3是指向浮點(diǎn)型變量的指針變量*/注:1.定義指針變量的物理意義:機(jī)器給指針變量分配內(nèi)存單元,此單元只能存放對(duì)象的地址1華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第1頁(yè)!2.指針類(lèi)型是指針?biāo)笇?duì)象的類(lèi)型(指針本身沒(méi)有類(lèi)型)例:int*fpi(),*a[10],(*pa)[10];/*復(fù)雜變量的指針*/fpi是一個(gè)整型指針函數(shù)(函數(shù)返回值是指向int變量的指針)a是含有10個(gè)元素的整型指針數(shù)組(每個(gè)元素是一個(gè)指向int變量的指針)pa是指向含有10個(gè)int元素的數(shù)組的指針
2華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第2頁(yè)!二.
指針變量的運(yùn)算符指針變量運(yùn)算符
*:間接取對(duì)象的內(nèi)容&:取操作對(duì)象的地址(都是一目運(yùn)算符)例:int*p,*p1,t,t1;……p=&t;/*使p指向t*//*等價(jià)于p=&t;p1=p*/p1=&t;/*使p1指向t*/t=4;……
t1=*p+3;/*間接取p指的對(duì)象內(nèi)容+3=>t1,即t1=7,等價(jià)于t1=t+3*/*p=0;/*將0送p指向的t單元中,即t=0*/……3華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第3頁(yè)!2).*與&是互逆的運(yùn)算符charc,*pc;……pc=&c;*(&c)=’a’;/*間接尋址pc*/*pc=’a’;/*間接尋址.訪(fǎng)問(wèn)c*/c=’a’;/*直接尋址,訪(fǎng)問(wèn)c*/
4華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第4頁(yè)!4)兩種特殊指針:void指針和NULL指針void指針:指向空值類(lèi)型的指針變量:可以與任何類(lèi)型指針變量相互賦值(不需要強(qiáng)制類(lèi)型轉(zhuǎn)換)如:int*p;void*p1;……p=p1;p1=p;
NULL指針:具有整數(shù)0值的指針:即不指向任何對(duì)象的指針NULL符號(hào)常量:在<stdio.h>有定義:或用#defineNULL0定義void*f();/*f是無(wú)參數(shù)的指針函數(shù)*/void*pa[]={&x1,&x2,&x3,&x4};
5華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第5頁(yè)!
2.
算術(shù)運(yùn)算僅限于加法和減法
1)指針變量加(減)一個(gè)整數(shù).int*p,*p1;……p++;/*訪(fǎng)問(wèn)p后,p從當(dāng)前位置向后移一個(gè)單元的數(shù)據(jù)*/p--;/*訪(fǎng)問(wèn)p后,p從當(dāng)前位置向前移一個(gè)單元的數(shù)據(jù)*/--p;/*訪(fǎng)問(wèn)p前,p從當(dāng)前位置向前移一個(gè)單元的數(shù)據(jù)*/p+5;/*指向p當(dāng)前所指數(shù)據(jù)后面第5個(gè)單元的數(shù)據(jù).2).同類(lèi)型指針變量之間僅只能相減,結(jié)果為整數(shù),(不為指針,大小為相隔的字節(jié)數(shù))如:上面p-p1;注:不允許兩指針變量相加,乘除,移位,屏敝運(yùn)算,以及float或double數(shù)與指針相加運(yùn)算6華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第6頁(yè)!§2.指針與數(shù)組指針與數(shù)組有密切關(guān)系:任何由數(shù)組下標(biāo)完成的操作,都可由指針實(shí)現(xiàn).一.一維數(shù)組的指針表示例:inta[10],*pa;……pa=&a[0];pa=a;(或pa=a+0)指針指向數(shù)組的首址
規(guī)定:pa+1指向a+1&a[1]第1個(gè)元素pa+2指向a+2&a[2]第2個(gè)元素…………pa+i指向a+i&a[i]第i個(gè)元素故:*(pa+i)或*(a+i)就是a[i]的內(nèi)容7華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第7頁(yè)!1).下標(biāo)法:main(){inti,min,max,a[10];for(i=0;i<10;i++)scanf(“%d”,&a[i]);min=max=a[0];for(i=1;i<10;i++)if(a[i]>max)max=a[i];elseif(a[i]<min)min=a[i];printf(“max=%d,min=%d\n”,max,min);}例:求整型數(shù)組a[10]中的最大值和最小值
8華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第8頁(yè)!3)用指針間接訪(fǎng)問(wèn)main(){int*p,min,max,a[10];p=a;for(;p<(a+10);p++)scanf(“%d”,p);min=max=*a;for(p=a+1;p<a+10;p++)if(*p>max)max=*p;elseif(*p<min)min=*p;printf(“max=%d,min=%d\n”,max,min);}9華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第9頁(yè)!例:lenth(s)/*計(jì)算s的長(zhǎng)度*/chars[];{intn;for(n=0;s[n]!=’\0’;n++);return(n);}
lenth(s)char*s;{intn;for(n=0;*s++!=’\0’;n++);return(n);}#include<string.h>main(){staticchars1[]=”abcdef”;/*等價(jià)于char*s1=“abcded”;*/intstring;string=lenth(s1);/*等價(jià)于string=lenth(&s1[0]);*/printf(“%d\n”,string);}10華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第10頁(yè)!二.指針與多維數(shù)組
1.
二維數(shù)組元素的表示例:inta[2][3]={{1,2,3},{4,5,6}};
1)下標(biāo)表示:元素的地址表示:&a[i][j](取地址)元素的內(nèi)容表示:a[i][j]2)元素的數(shù)組名表示例:inta[2][3]={{1,2,3},{4,5,6}};數(shù)組名a被看成由元素a[0],a[i]的一維數(shù)組,但a[0]又可看成包含3個(gè)元素a[0][0],a[0][1],a[0][2],一維數(shù)組a[1]又可看成包含3個(gè)元素a[1][0],a[1][1],a[1][2],一維數(shù)組即:11華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第11頁(yè)!例:編程用指針變量輸出數(shù)組元素的值.main(){inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};int*p;for(p=a[0];p<a[0]+12;p++){if((p-a[0])%4==0)printf(“\n”);/*一行輸出4個(gè)數(shù)據(jù)*/printf(“%5d”,*p)}}12華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第12頁(yè)!
2.
多維數(shù)組的指針表示三維及以上的數(shù)組用指針表示比較復(fù)雜,一般采用下標(biāo)表示元素法比較好;3.指向二維數(shù)組的指針變量的使用1)指針變量指向二維數(shù)組的某個(gè)元素
定義時(shí):*指針變量=&數(shù)組名[下標(biāo)1][下標(biāo)2]引用時(shí):指針變量=&數(shù)組名[下標(biāo)1][下標(biāo)2]例:輸入2行3列的矩陣中的元素,存入二維數(shù)組,再按行列輸出.main(){inta[2][3],*p;inti,j;for(i=0;i<2;i++)for(j=0;j<3;j++){p=&a[i][j];scanf(“%d”,p);}inta[2][3],*p=a;(或*p=&a[0][0])…….for(i=0;i<2;i++)for(j=0;j<3;j++){scanf(“%d”,p);p++;}13華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第13頁(yè)!
定義時(shí):(*指針變量)[m]=二維數(shù)組名(m為列長(zhǎng))
引用時(shí):指針變量=二維數(shù)組名數(shù)組元素的地址引用:*(指針變量+行下標(biāo))+列下標(biāo)數(shù)組元素的內(nèi)容引用:*(*(指針變量+行下標(biāo))+列下標(biāo))例:上例:
main(){inta[2][3],(*p)[3]=a;inti,j;for(I=0;i<2;i++)for(j=0;j<3;j++)scanf(“%d”,*(p+i)+j);或:*(a+i)+j;
for(i=0;i<2;i++){printf(“\n”)for(j=0;j<3;j++)printf(“%5d”,*(*(p+i)+j));或:*(*(a+i)+j);}}
14華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第14頁(yè)!例:輸入一個(gè)表示月份的整數(shù),輸出該月份的名字
main(){intn;char*month[]={“Illegalmonth“,“Jan.”,“Feb.”,“March”,“April”,”May”,”June”,”July”,“Aug.”,”Sep.”,“Oct.”,”Nov.”,”Dec.”};printf(“Inputnumberofmonth:\n:“);scanf(“%d”,&n);if(n>=1&&n<=12)printf(“%s\n”,month[n]);elseprintf(“%s\n”,month[0]);}15華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第15頁(yè)!參數(shù)argc,argv的定義:main(argc,argv)intargc;char*argv[];/*或char**argv;){…….}注:1.argc和argv位置不能顛倒2.argc和argv的初始化,由鍵入的命令(包括命令字)的個(gè)數(shù)決定.
16華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第16頁(yè)!四:指向指針的指針變量定義形式:類(lèi)型標(biāo)識(shí)符**標(biāo)識(shí)符例:char**p;相當(dāng)于*(*p)其中:*p是指針變量的說(shuō)明,它說(shuō)明了一個(gè)指向字符型數(shù)據(jù)的指針變量
前*()星號(hào)表示指針變量p是指向一個(gè)字符型指針變量的指針變量(指針變量的嵌套定義)注:訪(fǎng)問(wèn)內(nèi)容時(shí),需要二次間址操作:用**p表示:*p是間接指向?qū)ο蟮牡刂?而**p是p間接指向的對(duì)象的值.
17華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第17頁(yè)!
§3.指針與函數(shù)
一.
指針變量作為函數(shù)參數(shù)1.指針變量作為函數(shù)形參可改變對(duì)應(yīng)實(shí)參的值(傳地址)如:main(){inta=5;i=3,out;out=changer(&i)*i;printf(“%d%d\n”,i,out);}changer(int*index){intre;*index=7;re=5*(*index);return(re);}注:除數(shù)組名外,任何以地址傳遞的實(shí)參變量必須在變量名前加上&符號(hào),表示傳地址,在被調(diào)用函數(shù)中形參要說(shuō)明為指針18華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第18頁(yè)!2.指針作形參,對(duì)應(yīng)實(shí)參的形式voidsort(int*v,intn)/*v[]和*v都是數(shù)組指針變量*/{…...}調(diào)用函數(shù){inta[10],*p;p=&a[0];sort(p,10);…….}調(diào)用形式實(shí)現(xiàn)sort(a,5)a[0],a[1],a[2],a[3],a[4]排序sort(a+3,8)a[3]~a[1]排序sort(&a[4],10)a[4]~a[9]排序19華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第19頁(yè)!3)形參說(shuō)明為指向下一級(jí)數(shù)組的指針,實(shí)參為下一組數(shù)組的指針,或指向下一級(jí)數(shù)組的指針變量.如:voidf(int(*pa)[3],intsize){…..}調(diào)用函數(shù):{inta[2][3];……f(a,2);……}或{inta[2][3],(*p)[3];……p=a;f(p,2);……}
C語(yǔ)言中:函數(shù)不能返回?cái)?shù)組,函數(shù),結(jié)構(gòu),聯(lián)合類(lèi)型的值,
但可以用返回指向此類(lèi)數(shù)據(jù)的指針的方法實(shí)現(xiàn).20華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第20頁(yè)!例:求a,b中的最小數(shù)的程序.1.一般函數(shù)調(diào)用main(){inta,b,c;scanf(“%d%d”,&a,&b);c=min(a,b);printf(“min=%d\n”,c);}min(intx,inty){intz;if(x<y)z=x;elsez=y;return(z);}2.用函數(shù)指針調(diào)用main(){inta,b,c;int(*p)();scanf(“%d%d”,&a,&b);p=min;c=(*p)(a,b);/*不能寫(xiě)成p=min(a,b);*/printf(“min=%d\”,c);}注:函數(shù)指針作為函數(shù),函數(shù)名作為形參,實(shí)現(xiàn)將函數(shù)名作為參數(shù)傳給其他函數(shù)的目的
21華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第21頁(yè)!通過(guò)函數(shù)指針將函數(shù)名作為參數(shù)傳給其他函數(shù),便能創(chuàng)造出功能很強(qiáng)的高級(jí)函數(shù)系統(tǒng),,在大型c程序設(shè)計(jì)中很有作用定義另一個(gè)函數(shù)all如下
voidall(intx,inty,func)int(*func)();/*函數(shù)名傳遞*/{intz;z=(*func)(x,y);printf(“%d\n”,z);}main(){inta,b;scanf(“%d%d”,&a,&b);all(a,b,max);all(a,b,min);all(a,b,mean);}22華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第22頁(yè)!
main(){chars1[80],s2[80];scanf(“%s”,s1);scanf(“%s”,s2);printf(“%s\n”,cat(s1,s2));}23華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第23頁(yè)!練習(xí)題將下列函數(shù)的數(shù)組參數(shù),改寫(xiě)成指針參數(shù),且使函數(shù)的功能不變floatav(a,n)floata[];intn;{inti;floats;for(i=0,s=0;i<n;i++)s=s+a[i];return(s/n);}24華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第24頁(yè)!2)chars[]=”ABCD”;main(){char*p;for(p=s;p<s+4;p++)printf(“%s”\n”,p);}
3.
編程:輸入10個(gè)整數(shù)存入一維數(shù)組中,統(tǒng)計(jì)其中既能被3整除又能被8整除的數(shù)的個(gè)數(shù)(用組數(shù)和指針兩種方式做)同時(shí)顯示這些數(shù)在該數(shù)組中的下標(biāo)值4.
編程:輸入一個(gè)字符串,間隔顯示其中的字符.(用指針和數(shù)組兩種方法做)如:abcdef顯示:ace25華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第25頁(yè)!例:inti,j,*p;1)
i=123;2)
p=&i;3)
j=*p;但:p=i;或p=j;p=123都是錯(cuò)誤的,不能將常量或變量的內(nèi)容值送指針變量.注:1)&變量名:包括基本類(lèi)型的變量,數(shù)組元素,結(jié)構(gòu)變量或結(jié)構(gòu)的成員.不能作用于數(shù)組名.,常量,非左值表達(dá)式或寄存器變量.例:doubler,a[20];inti;registerintk;表達(dá)式:&r,&a[0],&a[1]是正確的,
&(2*r),&a,&k是非法的.
26華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第26頁(yè)!三.指針運(yùn)算1.
賦值運(yùn)算1).同類(lèi)型的指針變量可以相互賦值,(指向同一類(lèi)型的對(duì)象)int*p1,*p2,a;p1=&a;p2=p1;*p1=5;2).常數(shù)0(NULL)可以賦給任何類(lèi)型的指針變量p1=0;p2=0;3).不同類(lèi)型的指針變量之間賦值必須采用類(lèi)型強(qiáng)制符來(lái)轉(zhuǎn)換(不能自動(dòng)類(lèi)型轉(zhuǎn)換,void指針除外)如:int*pi;charbuf[100],*bufp=buf;/*數(shù)組名作為地址常數(shù)賦給指針變量bufp*/pi=(int*)bufp;27華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第27頁(yè)!例:main(){int*p1,*p2,*p,a,b;scanf(“%d%d”,&a,&b);p1=&a;p2=&b;if(a<b)/*交換兩個(gè)指針變量的值*/{p=p1;p1=p2;p2=p;}printf(“a=%d,b=%d\n”,a,b);printf(“max=%d,min=%d\n”,*p1,*p2);}28華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第28頁(yè)!例:用指針定義求字符串長(zhǎng)度的函數(shù)intstrlen(char*s){char*p=s;while(*p!=’\0’)p++;return(p-s);}3.
關(guān)系運(yùn)算兩個(gè)指針指的類(lèi)型相同,可以進(jìn)行比較(>,<,>=,<=,==,!=)例:p>q若值為非0,則p所指的數(shù)據(jù)位于q所指的數(shù)據(jù)之前,反之為0指針變量不能與常量比較,但常量0(NULL)可與任何類(lèi)型的指針變量作==或!=的比較29華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第29頁(yè)!注:1)當(dāng)指針變量指向數(shù)組首址后,以下標(biāo)為i的數(shù)組元素引用的方法有3種*(指針變量+i),*(數(shù)組名+i),數(shù)組名[i]
指針?lè)?/p>
數(shù)組元素法
2)數(shù)組名與指針之間有區(qū)別:
指針是變量;數(shù)組名是地址常量如:pa=a;pa++;是有意義的操作a=pa;a++;pa=&a;a=a+1;都是非法的.訪(fǎng)問(wèn)一個(gè)數(shù)組元素:可用下標(biāo)法:a[i],也可用指針?lè)?*(p+i)或*(a+i)30華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第30頁(yè)!2)用數(shù)組名訪(fǎng)問(wèn)元素main(){inti,min,max,a[10];for(i=0;i<10;i++)scanf(“%d”,a+i);min=max=*a;for(i=1;i<10;i++)if(*(a+i)>max)max=*(a+i);elseif(*(a+i)<min)min=*(a+i);printf(“max=%d,min=%d\n”,max,min);}31華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第31頁(yè)!注:1.指針變量的定義和沒(méi)有指明長(zhǎng)度的數(shù)組視為一樣例:在函數(shù)定義中;參數(shù)說(shuō)明:f(chars[])
f(char*s){{}}2.在C語(yǔ)言中,只要出現(xiàn)未加下標(biāo)的數(shù)組名,字符串常量名,結(jié)構(gòu)名,聯(lián)合名或不帶參數(shù)的函數(shù)名,都可以解釋成指針.因此可同指針變量一樣置初值3.指針與字符串(字符數(shù)組)如:chars[]=“It’sastring”;char*s=”It’sastring”;但有區(qū)別:如:char*p;/*指向一個(gè)字符的指針變量*/p=“It’sastring”/*指向字符串的串首址*/scanf(“%s”,p);/*錯(cuò)誤,沒(méi)有為p所指的對(duì)象分配空間*/又如:chars[];s=“It’sastring”;/*錯(cuò)誤s為地址常量*/32華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第32頁(yè)!例:把字符串t復(fù)制到字符串s中的函數(shù)strcpy(s,t)用指針strcpy(s,t)char*s,*t;{while((*s++=*t++)!=’\0’);}用數(shù)組strcpy(chars[],chart[]){inti;for(i=0;(s[i++]=t[i])!=’\0’;);}*(s+i++)=*(t+i)33華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第33頁(yè)!根據(jù)C語(yǔ)言規(guī)定:數(shù)組名代表數(shù)組的首地址:因此.a代表二維數(shù)組的首址,(即第0行的首址),a+1:代表行的首址同理:a[0]為另一個(gè)一維數(shù)組的首址(即第0行第0列元素的首址)即:a[0]是&a[0][0];a[0]+1是&a[0][1];a[0]+2是&a[0][2]a[1]為另一個(gè)一維數(shù)組的首址(即第1行第0列元素的首址)即:a[1]是&a[1][0];a[1]+1是&a[1][1];a[1]+2是&a[1][2]即:a[i][j]元素的地址用數(shù)組名表示:a[i][j]或*(a+i)+j與二維數(shù)組地址&a[i][j]一樣a[i][j]元素值用數(shù)組名表示:有以下幾種等價(jià)形式:*(a[i]+j)*(*(a+i)+j)(*(a+i))[j]/*數(shù)組名與下標(biāo)混合表示*/或:*(&a[0][0]+2*i+j)/*注:inta[2][3]*/34華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第34頁(yè)!3)指向數(shù)組指針變量的定義如:int(*pa)[3],a[2][3];/*指針變量pa指向3個(gè)元素的數(shù)組*/pa=a;/*使pa指向數(shù)組a的第0行;*/注:int(*pa)[3]與int*pa[3]不同,后者為由三個(gè)指針組成的指針數(shù)組.例:上例:main(){inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};int(*p)[4],j;for(p=a;p<a+3;p++){for(j=0;j<4;j++)printf(“%5d”,*(*p+j));printf(“\n”);}}35華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第35頁(yè)!for(i=0;i<2;i++){printf(“\n”)for(j=0;j<3;j++){p=&a[i][j];printf(“%5d”,*p);}}}
2)指針變量指向二維數(shù)組的首地址
定義時(shí):*指針變量=二維數(shù)組名*指針變量=&三數(shù)組名[0][0]引用時(shí):指針變量=二維數(shù)組名指針變量=&二數(shù)組名[0][0]3)指針變量指向二維數(shù)組中的某一個(gè)一維數(shù)組P=a;(或p=&a[0][0];)for(i=0;i<2;i++){printf(“\n”)for(j=0;j<3;j++){printf(“%5d”,*p);p++;}}}36華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第36頁(yè)!三.指針數(shù)組和命令行處理由指針變量組成的數(shù)組1.指針數(shù)組說(shuō)明的一般形式:
類(lèi)型標(biāo)識(shí)符*數(shù)組名[常量表達(dá)式];例:int*a[4];注:1.*a[4]是指針數(shù)組而(*p)[4]是指向數(shù)組的指針變量2.指針數(shù)組主要用于字符串?dāng)?shù)組的處理和命令行參數(shù)的處理因?yàn)樽址當(dāng)?shù)組中每一個(gè)字符串不等長(zhǎng).37華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第37頁(yè)!2.命令行參數(shù)的處理命令行帶有任選變?cè)騾?shù)稱(chēng)為命令行參數(shù).如:c>echohelloworld/*操作系統(tǒng)下的命令行*/發(fā)布命令行的時(shí)刻:在操作系統(tǒng)下執(zhí)行時(shí)如何將命令的參數(shù)接收到程序中?方法是:通過(guò)函數(shù)main(argc,argv)中argc,argv傳送給程序.其中:argc:計(jì)算命令行中參數(shù)的個(gè)數(shù)argv:指針數(shù)組:每個(gè)元素是指向包含這些參數(shù)(字符串)的指針
如:c>echohelloworldargc=3argv[0]=“echo”argv[1]=“hello”argv[2]=“world”38華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第38頁(yè)!例:編一命令行執(zhí)行程序:c>echowhatdayistoday?輸出命令行參數(shù):whatdayistaday?
main(argc,argv)intargc;char*argv[];{while(--argc>0)printf(“%s%c”,*++argv,(argc>1)?’‘:’\n’);}編譯echo.c生成echo.exe文件,在dos狀態(tài)下執(zhí)行
c>echowhatdayistoday?顯示:whatdayistoday?它告訴我們:可在操作系統(tǒng)狀態(tài)下,利用程序,接收字符串,然后處理這些串..例如:輸入:c>day22001/*設(shè)計(jì)程序day.c,接收月份,年份,顯示該月的天數(shù)*/39華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第39頁(yè)!例:#include<stdio.h>main{inti,a[5],*num[5],**p;printf(“inputinteger5:\n“);for(i=0;i<5;I++){num[i]=&a[i];scanf(“%d”,num[i]);}p=num;for(i=0;i<5;i++)printf(“%5d”,*(*(p+i)));}輸入:integer5:12345輸出:1234540華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第40頁(yè)!2.通過(guò)指針參數(shù)可以從被調(diào)用參數(shù)中返回多個(gè)值例.求10個(gè)整數(shù)中奇數(shù)和偶數(shù)的個(gè)數(shù)
voidcount(intx,intp1,intp2){if(x%2!=0)++*p1;else++*p2;}main(){inti,j,sum1=0,sum2=0;for(i=0;i<=10;++i){scanf(“%d”,&j);count(j,&sum1,&sum2);}printf(“even=%d,odd=%d\n“,sum2,sum1);}41華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第41頁(yè)!2)形參說(shuō)明為指向數(shù)組元素的指針,實(shí)參為數(shù)組元素的地址或指向元素的指針變量.如:voidf(int*p,intsize){…...}調(diào)用函數(shù){inta[2][3];…….f(a[0],2*3);/*或&a[0][0]*/..….}42華中科技大學(xué)光電子學(xué)院C語(yǔ)言第七章共48頁(yè),您現(xiàn)在瀏覽的是第42頁(yè)!
二.
指向函數(shù)的指針變量(函數(shù)指針)定義形式:類(lèi)型標(biāo)識(shí)符(*指針變量名)();例:int(*p)();/*與數(shù)組指針定義類(lèi)似:char(*p)[]*/
說(shuō)明:1.p是指向一個(gè)函數(shù)的指針變量,(指向該函數(shù)名代表的入口地址送指針p),此函數(shù)返回int類(lèi)型的值2.用函數(shù)指針變量調(diào)用函數(shù)時(shí),用函
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO/CIE 11664-5:2024 EN Colorimetry - Part 5: CIE 1976 L*u*v* colour space and u,v'uniform chromaticity scale diagram
- 【正版授權(quán)】 ISO 15004-2:2024 EN Ophthalmic instruments - Fundamental requirements and test methods - Part 2: Light hazard protection
- 2025年基因工程項(xiàng)目合作計(jì)劃書(shū)
- 2025年冷光源:EL冷光片項(xiàng)目合作計(jì)劃書(shū)
- 2025年度公路橋梁鋼筋供應(yīng)與施工承包協(xié)議
- 2025年度辦公樓物業(yè)環(huán)境監(jiān)測(cè)與改善服務(wù)協(xié)議
- 2025年度特色餐飲店品牌獨(dú)家承包經(jīng)營(yíng)合同協(xié)議
- 2025年度全國(guó)巡演活動(dòng)場(chǎng)地租賃合同范本
- 急診病人流量預(yù)測(cè)與管理計(jì)劃
- 2025年無(wú)菌包裝用包裝材料合作協(xié)議書(shū)
- 道路標(biāo)線(xiàn)施工技術(shù)規(guī)程(已執(zhí)行)
- 律師事務(wù)所主任在司法行政工作會(huì)議上的發(fā)言稿
- 給排水管道工程分項(xiàng)、分部、單位工程劃分
- 《傻子上學(xué)》臺(tái)詞
- 高中英語(yǔ)新課程標(biāo)準(zhǔn)解讀 (課堂PPT)
- 石灰石石膏濕法脫硫化學(xué)分析方案
- 《數(shù)學(xué)趣味活動(dòng)》PPT課件.ppt
- 銅冶煉渣選銅尾礦還原焙燒—磁選回收鐵工藝研究
- 交接班制度.ppt
- 北師大版五年級(jí)數(shù)學(xué)下冊(cè)導(dǎo)學(xué)案全冊(cè)
- 成都嘉祥外國(guó)語(yǔ)學(xué)校獎(jiǎng)學(xué)金考試數(shù)學(xué)試卷
評(píng)論
0/150
提交評(píng)論