華中科技大學(xué)光電子學(xué)院C語言第七章_第1頁
華中科技大學(xué)光電子學(xué)院C語言第七章_第2頁
華中科技大學(xué)光電子學(xué)院C語言第七章_第3頁
華中科技大學(xué)光電子學(xué)院C語言第七章_第4頁
華中科技大學(xué)光電子學(xué)院C語言第七章_第5頁
已閱讀5頁,還剩43頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第七章指針

1.指針與數(shù)組的關(guān)系2.指針與函數(shù)的關(guān)系§1.指針及定義一.

指針變量的定義指針變量:存放對象地址的變量.指針變量定義的基本形式:類型說明符*變量名;例:int*pi,*pj;/*pi,pj指向整型變量的指針變量*/float*p3;/*p3是指向浮點型變量的指針變量*/注:1.定義指針變量的物理意義:機器給指針變量分配內(nèi)存單元,此單元只能存放對象的地址1華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第1頁!2.指針類型是指針所指對象的類型(指針本身沒有類型)例:int*fpi(),*a[10],(*pa)[10];/*復(fù)雜變量的指針*/fpi是一個整型指針函數(shù)(函數(shù)返回值是指向int變量的指針)a是含有10個元素的整型指針數(shù)組(每個元素是一個指向int變量的指針)pa是指向含有10個int元素的數(shù)組的指針

2華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第2頁!二.

指針變量的運算符指針變量運算符

*:間接取對象的內(nèi)容&:取操作對象的地址(都是一目運算符)例:int*p,*p1,t,t1;……p=&t;/*使p指向t*//*等價于p=&t;p1=p*/p1=&t;/*使p1指向t*/t=4;……

t1=*p+3;/*間接取p指的對象內(nèi)容+3=>t1,即t1=7,等價于t1=t+3*/*p=0;/*將0送p指向的t單元中,即t=0*/……3華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第3頁!2).*與&是互逆的運算符charc,*pc;……pc=&c;*(&c)=’a’;/*間接尋址pc*/*pc=’a’;/*間接尋址.訪問c*/c=’a’;/*直接尋址,訪問c*/

4華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第4頁!4)兩種特殊指針:void指針和NULL指針void指針:指向空值類型的指針變量:可以與任何類型指針變量相互賦值(不需要強制類型轉(zhuǎn)換)如:int*p;void*p1;……p=p1;p1=p;

NULL指針:具有整數(shù)0值的指針:即不指向任何對象的指針NULL符號常量:在<stdio.h>有定義:或用#defineNULL0定義void*f();/*f是無參數(shù)的指針函數(shù)*/void*pa[]={&x1,&x2,&x3,&x4};

5華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第5頁!

2.

算術(shù)運算僅限于加法和減法

1)指針變量加(減)一個整數(shù).int*p,*p1;……p++;/*訪問p后,p從當(dāng)前位置向后移一個單元的數(shù)據(jù)*/p--;/*訪問p后,p從當(dāng)前位置向前移一個單元的數(shù)據(jù)*/--p;/*訪問p前,p從當(dāng)前位置向前移一個單元的數(shù)據(jù)*/p+5;/*指向p當(dāng)前所指數(shù)據(jù)后面第5個單元的數(shù)據(jù).2).同類型指針變量之間僅只能相減,結(jié)果為整數(shù),(不為指針,大小為相隔的字節(jié)數(shù))如:上面p-p1;注:不允許兩指針變量相加,乘除,移位,屏敝運算,以及float或double數(shù)與指針相加運算6華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第6頁!§2.指針與數(shù)組指針與數(shù)組有密切關(guān)系:任何由數(shù)組下標完成的操作,都可由指針實現(xiàn).一.一維數(shù)組的指針表示例:inta[10],*pa;……pa=&a[0];pa=a;(或pa=a+0)指針指向數(shù)組的首址

規(guī)定:pa+1指向a+1&a[1]第1個元素pa+2指向a+2&a[2]第2個元素…………pa+i指向a+i&a[i]第i個元素故:*(pa+i)或*(a+i)就是a[i]的內(nèi)容7華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第7頁!1).下標法: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語言第七章共48頁,您現(xiàn)在瀏覽的是第8頁!3)用指針間接訪問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語言第七章共48頁,您現(xiàn)在瀏覽的是第9頁!例:lenth(s)/*計算s的長度*/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”;/*等價于char*s1=“abcded”;*/intstring;string=lenth(s1);/*等價于string=lenth(&s1[0]);*/printf(“%d\n”,string);}10華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第10頁!二.指針與多維數(shù)組

1.

二維數(shù)組元素的表示例:inta[2][3]={{1,2,3},{4,5,6}};

1)下標表示:元素的地址表示:&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個元素a[0][0],a[0][1],a[0][2],一維數(shù)組a[1]又可看成包含3個元素a[1][0],a[1][1],a[1][2],一維數(shù)組即:11華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第11頁!例:編程用指針變量輸出數(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個數(shù)據(jù)*/printf(“%5d”,*p)}}12華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第12頁!

2.

多維數(shù)組的指針表示三維及以上的數(shù)組用指針表示比較復(fù)雜,一般采用下標表示元素法比較好;3.指向二維數(shù)組的指針變量的使用1)指針變量指向二維數(shù)組的某個元素

定義時:*指針變量=&數(shù)組名[下標1][下標2]引用時:指針變量=&數(shù)組名[下標1][下標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語言第七章共48頁,您現(xiàn)在瀏覽的是第13頁!

定義時:(*指針變量)[m]=二維數(shù)組名(m為列長)

引用時:指針變量=二維數(shù)組名數(shù)組元素的地址引用:*(指針變量+行下標)+列下標數(shù)組元素的內(nèi)容引用:*(*(指針變量+行下標)+列下標)例:上例:

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語言第七章共48頁,您現(xiàn)在瀏覽的是第14頁!例:輸入一個表示月份的整數(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語言第七章共48頁,您現(xiàn)在瀏覽的是第15頁!參數(shù)argc,argv的定義:main(argc,argv)intargc;char*argv[];/*或char**argv;){…….}注:1.argc和argv位置不能顛倒2.argc和argv的初始化,由鍵入的命令(包括命令字)的個數(shù)決定.

16華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第16頁!四:指向指針的指針變量定義形式:類型標識符**標識符例:char**p;相當(dāng)于*(*p)其中:*p是指針變量的說明,它說明了一個指向字符型數(shù)據(jù)的指針變量

前*()星號表示指針變量p是指向一個字符型指針變量的指針變量(指針變量的嵌套定義)注:訪問內(nèi)容時,需要二次間址操作:用**p表示:*p是間接指向?qū)ο蟮牡刂?而**p是p間接指向的對象的值.

17華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第17頁!

§3.指針與函數(shù)

一.

指針變量作為函數(shù)參數(shù)1.指針變量作為函數(shù)形參可改變對應(yīng)實參的值(傳地址)如: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ù)組名外,任何以地址傳遞的實參變量必須在變量名前加上&符號,表示傳地址,在被調(diào)用函數(shù)中形參要說明為指針18華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第18頁!2.指針作形參,對應(yīng)實參的形式voidsort(int*v,intn)/*v[]和*v都是數(shù)組指針變量*/{…...}調(diào)用函數(shù){inta[10],*p;p=&a[0];sort(p,10);…….}調(diào)用形式實現(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語言第七章共48頁,您現(xiàn)在瀏覽的是第19頁!3)形參說明為指向下一級數(shù)組的指針,實參為下一組數(shù)組的指針,或指向下一級數(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語言中:函數(shù)不能返回數(shù)組,函數(shù),結(jié)構(gòu),聯(lián)合類型的值,

但可以用返回指向此類數(shù)據(jù)的指針的方法實現(xiàn).20華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第20頁!例:求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);/*不能寫成p=min(a,b);*/printf(“min=%d\”,c);}注:函數(shù)指針作為函數(shù),函數(shù)名作為形參,實現(xiàn)將函數(shù)名作為參數(shù)傳給其他函數(shù)的目的

21華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第21頁!通過函數(shù)指針將函數(shù)名作為參數(shù)傳給其他函數(shù),便能創(chuàng)造出功能很強的高級函數(shù)系統(tǒng),,在大型c程序設(shè)計中很有作用定義另一個函數(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語言第七章共48頁,您現(xiàn)在瀏覽的是第22頁!

main(){chars1[80],s2[80];scanf(“%s”,s1);scanf(“%s”,s2);printf(“%s\n”,cat(s1,s2));}23華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第23頁!練習(xí)題將下列函數(shù)的數(shù)組參數(shù),改寫成指針參數(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語言第七章共48頁,您現(xiàn)在瀏覽的是第24頁!2)chars[]=”ABCD”;main(){char*p;for(p=s;p<s+4;p++)printf(“%s”\n”,p);}

3.

編程:輸入10個整數(shù)存入一維數(shù)組中,統(tǒng)計其中既能被3整除又能被8整除的數(shù)的個數(shù)(用組數(shù)和指針兩種方式做)同時顯示這些數(shù)在該數(shù)組中的下標值4.

編程:輸入一個字符串,間隔顯示其中的字符.(用指針和數(shù)組兩種方法做)如:abcdef顯示:ace25華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第25頁!例:inti,j,*p;1)

i=123;2)

p=&i;3)

j=*p;但:p=i;或p=j;p=123都是錯誤的,不能將常量或變量的內(nèi)容值送指針變量.注:1)&變量名:包括基本類型的變量,數(shù)組元素,結(jié)構(gòu)變量或結(jié)構(gòu)的成員.不能作用于數(shù)組名.,常量,非左值表達式或寄存器變量.例:doubler,a[20];inti;registerintk;表達式:&r,&a[0],&a[1]是正確的,

&(2*r),&a,&k是非法的.

26華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第26頁!三.指針運算1.

賦值運算1).同類型的指針變量可以相互賦值,(指向同一類型的對象)int*p1,*p2,a;p1=&a;p2=p1;*p1=5;2).常數(shù)0(NULL)可以賦給任何類型的指針變量p1=0;p2=0;3).不同類型的指針變量之間賦值必須采用類型強制符來轉(zhuǎn)換(不能自動類型轉(zhuǎn)換,void指針除外)如:int*pi;charbuf[100],*bufp=buf;/*數(shù)組名作為地址常數(shù)賦給指針變量bufp*/pi=(int*)bufp;27華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第27頁!例:main(){int*p1,*p2,*p,a,b;scanf(“%d%d”,&a,&b);p1=&a;p2=&b;if(a<b)/*交換兩個指針變量的值*/{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語言第七章共48頁,您現(xiàn)在瀏覽的是第28頁!例:用指針定義求字符串長度的函數(shù)intstrlen(char*s){char*p=s;while(*p!=’\0’)p++;return(p-s);}3.

關(guān)系運算兩個指針指的類型相同,可以進行比較(>,<,>=,<=,==,!=)例:p>q若值為非0,則p所指的數(shù)據(jù)位于q所指的數(shù)據(jù)之前,反之為0指針變量不能與常量比較,但常量0(NULL)可與任何類型的指針變量作==或!=的比較29華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第29頁!注:1)當(dāng)指針變量指向數(shù)組首址后,以下標為i的數(shù)組元素引用的方法有3種*(指針變量+i),*(數(shù)組名+i),數(shù)組名[i]

指針法

數(shù)組元素法

2)數(shù)組名與指針之間有區(qū)別:

指針是變量;數(shù)組名是地址常量如:pa=a;pa++;是有意義的操作a=pa;a++;pa=&a;a=a+1;都是非法的.訪問一個數(shù)組元素:可用下標法:a[i],也可用指針法:*(p+i)或*(a+i)30華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第30頁!2)用數(shù)組名訪問元素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語言第七章共48頁,您現(xiàn)在瀏覽的是第31頁!注:1.指針變量的定義和沒有指明長度的數(shù)組視為一樣例:在函數(shù)定義中;參數(shù)說明:f(chars[])

f(char*s){{}}2.在C語言中,只要出現(xiàn)未加下標的數(shù)組名,字符串常量名,結(jié)構(gòu)名,聯(lián)合名或不帶參數(shù)的函數(shù)名,都可以解釋成指針.因此可同指針變量一樣置初值3.指針與字符串(字符數(shù)組)如:chars[]=“It’sastring”;char*s=”It’sastring”;但有區(qū)別:如:char*p;/*指向一個字符的指針變量*/p=“It’sastring”/*指向字符串的串首址*/scanf(“%s”,p);/*錯誤,沒有為p所指的對象分配空間*/又如:chars[];s=“It’sastring”;/*錯誤s為地址常量*/32華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第32頁!例:把字符串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語言第七章共48頁,您現(xiàn)在瀏覽的是第33頁!根據(jù)C語言規(guī)定:數(shù)組名代表數(shù)組的首地址:因此.a代表二維數(shù)組的首址,(即第0行的首址),a+1:代表行的首址同理:a[0]為另一個一維數(shù)組的首址(即第0行第0列元素的首址)即:a[0]是&a[0][0];a[0]+1是&a[0][1];a[0]+2是&a[0][2]a[1]為另一個一維數(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ù)組名表示:有以下幾種等價形式:*(a[i]+j)*(*(a+i)+j)(*(a+i))[j]/*數(shù)組名與下標混合表示*/或:*(&a[0][0]+2*i+j)/*注:inta[2][3]*/34華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第34頁!3)指向數(shù)組指針變量的定義如:int(*pa)[3],a[2][3];/*指針變量pa指向3個元素的數(shù)組*/pa=a;/*使pa指向數(shù)組a的第0行;*/注:int(*pa)[3]與int*pa[3]不同,后者為由三個指針組成的指針數(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語言第七章共48頁,您現(xiàn)在瀏覽的是第35頁!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ù)組名[0][0]引用時:指針變量=二維數(shù)組名指針變量=&二數(shù)組名[0][0]3)指針變量指向二維數(shù)組中的某一個一維數(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語言第七章共48頁,您現(xiàn)在瀏覽的是第36頁!三.指針數(shù)組和命令行處理由指針變量組成的數(shù)組1.指針數(shù)組說明的一般形式:

類型標識符*數(shù)組名[常量表達式];例:int*a[4];注:1.*a[4]是指針數(shù)組而(*p)[4]是指向數(shù)組的指針變量2.指針數(shù)組主要用于字符串?dāng)?shù)組的處理和命令行參數(shù)的處理因為字符串?dāng)?shù)組中每一個字符串不等長.37華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第37頁!2.命令行參數(shù)的處理命令行帶有任選變元或參數(shù)稱為命令行參數(shù).如:c>echohelloworld/*操作系統(tǒng)下的命令行*/發(fā)布命令行的時刻:在操作系統(tǒng)下執(zhí)行時如何將命令的參數(shù)接收到程序中?方法是:通過函數(shù)main(argc,argv)中argc,argv傳送給程序.其中:argc:計算命令行中參數(shù)的個數(shù)argv:指針數(shù)組:每個元素是指向包含這些參數(shù)(字符串)的指針

如:c>echohelloworldargc=3argv[0]=“echo”argv[1]=“hello”argv[2]=“world”38華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第38頁!例:編一命令行執(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è)計程序day.c,接收月份,年份,顯示該月的天數(shù)*/39華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第39頁!例:#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語言第七章共48頁,您現(xiàn)在瀏覽的是第40頁!2.通過指針參數(shù)可以從被調(diào)用參數(shù)中返回多個值例.求10個整數(shù)中奇數(shù)和偶數(shù)的個數(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語言第七章共48頁,您現(xiàn)在瀏覽的是第41頁!2)形參說明為指向數(shù)組元素的指針,實參為數(shù)組元素的地址或指向元素的指針變量.如:voidf(int*p,intsize){…...}調(diào)用函數(shù){inta[2][3];…….f(a[0],2*3);/*或&a[0][0]*/..….}42華中科技大學(xué)光電子學(xué)院C語言第七章共48頁,您現(xiàn)在瀏覽的是第42頁!

二.

指向函數(shù)的指針變量(函數(shù)指針)定義形式:類型標識符(*指針變量名)();例:int(*p)();/*與數(shù)組指針定義類似:char(*p)[]*/

說明:1.p是指向一個函數(shù)的指針變量,(指向該函數(shù)名代表的入口地址送指針p),此函數(shù)返回int類型的值2.用函數(shù)指針變量調(diào)用函數(shù)時,用函

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論