版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、C ++ 程序設(shè)計教程(修訂版),第八章 指針,清華大學(xué)出版社 錢 能,講師:曹曉麗,C++程序設(shè)計中使用指針可以:使程序簡潔、緊湊、高效有效地表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu)動態(tài)分配內(nèi)存得到多于一個的函數(shù)返回值,程序中: int i; float k;,內(nèi)存中每個字節(jié)有一個編號-----地址,i,k,編譯或函數(shù)調(diào)用時為其分配內(nèi)存單元,變量是
2、對程序中數(shù)據(jù)存儲空間的抽象,1. 變量與地址,8.1 指針的基本概念,指針:一個變量的地址,它是一個整數(shù)形式的常量。指針變量:專門用來存放地址的變量叫指針變量,它的值也可以是數(shù)組或函數(shù)的地址 。,2000,指針,指針變量,變量的內(nèi)容,變量的地址,2. 指針與指針變量,含義: 取變量的地址單目運算符優(yōu)先級: 14(第二高的級別)結(jié)合性:自右向左,含義: 從某個地址中獲取數(shù)據(jù)單目運算符優(yōu)先級: 14結(jié)合性:自右向左,兩者關(guān)
3、系:互為逆運算,3. 取地址運算符&與指針運算符*,i_pointer-----指針變量,它的內(nèi)容是地址量2000*i_pointer----指針的目標(biāo)變量i,它的內(nèi)容是數(shù)據(jù)10&i_pointer---指針變量占用內(nèi)存的地址:2004,i_pointer &i &(*i_pointer)i *i_pointer *(&i),指針運算符示例,例
4、i=3; -----直接訪問,3,例 *i_pointer=20; -----間接訪問,,,,,20,,直接訪問:按變量地址存取變量值間接訪問:通過存放變量地址的變量去訪問變量,4. 直接訪問與間接訪問,1. 指針變量與其所指向的變量之間的關(guān)系,2. 指針變量的定義一般形式: [存儲類型] 數(shù)據(jù)類型 *指針名;,合法標(biāo)識符,指針變量本身的存儲類型,指針的目標(biāo)變量的數(shù)據(jù)類型,表示定義指針
5、變量不是乘法運算符*,例 int *p1,*p2; float *q ; static char *name;,注意:1、int *p1, *p2; 與 int *p1, p2;不一樣。2、指針變量名是p1,p2 ,不是*p1,*p2。3、指針變量只能指向定義時所規(guī)定類型的變量。4、指針變量定義后,變量值不確定,應(yīng)用前必須先賦值。,8.2 指針變量的定義與引用
6、,將地址值賦給指針變量,例 int i; int *p=&i;,變量必須已說明過;并要求兩者類型一致。,例 int i; int *p=&i; int *q=p;,用已初始化指針變量作初值,例 main( ) { int i; static int *p=&i; (?) .........
7、..... },不能用auto變量的地址去初始化static型指針,一般形式:[存儲類型] 數(shù)據(jù)類型 *指針名=初始地址值;,3.對指針變量的操作,(1) 指針變量的初始化,3.對指針變量的操作(續(xù)),(2) 指針變量 +/- 整數(shù)?新的地址,int a,b,c,d,*p,*q; p=&b;q=p+1;,所加的數(shù)值:整數(shù)*字節(jié)數(shù) q=p-1; p++; ++p; 注意:*p++; *+
8、+p; 不同于 (*p)++; ++ (*p);,(3) 指針變量 - 指針變量 ?整數(shù)(多少個數(shù)) q-p ?1;,(4) 關(guān)系運算 p<q ?1; p==q ?0;,例 main( ) { int i=10; int *p; *p=i; cout<<*p; },危險!,
9、例 main( ) { int i=10,k; int *p; p=&k; *p=i; cout<<*p; },4. 指針變量必須先賦值,再使用!,零指針與空類型指針零指針:(空指針)定義:指針變量值為零 例如: int * p=0;,p指向地址為0的內(nèi)存單元;
10、系統(tǒng)保證該單元不作它用;表示指針變量的值沒有意義。,#define NULL 0int *p=NULL;,p=NULL與未對p賦值不同用途: 避免指針變量的非法引用在程序中常作為狀態(tài)比較,例 int *p; ...... while(p!=NULL) { ...… },5. 零指針,一般形式: voi
11、d *類型指針;例如: void *p;,表示不指定p是指向哪一種類型數(shù)據(jù)的指針變量。使用時要進行強制類型轉(zhuǎn)換。,6. 空類型指針,例 char *p1; void *p2; p1=(char *)p2; p2=(void *)p1;,TC中分配內(nèi)存空間的函數(shù)返回一個空類型的指針。 void *malloc(int n); 例如:int *p
12、= (int *) malloc(2);,main(){ int *p1,*p2,*p,a,b; a=5;b=9; p1=&a; p2=&b; if(a<b) { p=p1; p1=p2; p2=p;} cout<<a<<b; cout<<"max="<<"min="
13、<<*p1<<*p2;},運行結(jié)果:5,9a=5,b=9max=9,min=5,5,2008,9,2010,2008,2010,2008,例8.3 按先大后小的順序輸出a和b兩個整數(shù)。,7. 多重指針,一個指針變量的內(nèi)容就是內(nèi)存中某個存儲區(qū)域的地址,這個存儲區(qū)域中存放的值可以是一個基本數(shù)據(jù)類型的數(shù)據(jù),也可以是另一個存儲區(qū)域的地址。我們把這種類型的指針叫做多重指針。,二重指針(指向指針的指針)的一般說明形
14、式為: 類型說明符 **指針變量名;,二重指針的使用。main(){ int *p1, **p2, i = 10; p1=&i; p2=&p1; },void swap(int x,int y){ int temp; temp=x; x=y; y=temp;}void main(){ int a=10,b=20;
15、 if(a<b) swap(a,b); cout<<a<<b;},,10,20,10,10,20,COPY,值傳遞,運行結(jié)果:10, 20不能達到預(yù)期的結(jié)果!,8.3 函數(shù)之間地址值的傳遞,1. 形參為指針變量:傳遞的是指針變量的值----地址。 特點:共享內(nèi)存, 相當(dāng)于“雙向”傳遞!,例6.5 將數(shù)從大到小輸出(用變量作函數(shù)的參數(shù)),void swap(int *p1, i
16、nt *p2){ int p; p=*p1; *p1=*p2; *p2=p;}main(){ int a,b; int *pointer_1,*pointer_2; a=5; b=9; pointer_1=&a; pointer_2=&b; if(a<b)swap(pointer_1,pointer_2); cout<&l
17、t;a<<b;},5,9,2000,2002,5,9,COPY,5,例8.5 將數(shù)從大到小輸出(用指針作函數(shù)的參數(shù)),void swap(int *p1, int *p2){ int p; p=*p1; *p1=*p2; *p2=p;}main(){ int a,b; int *pointer_1,*pointer_2; a=5; b=9; point
18、er_1=&a; pointer_2=&b; if(a<b)swap(pointer_1,pointer_2); cout<<a<<b;},5,9,2000,2002,5,9,運行結(jié)果:9,5,地址值傳遞,例8.5 將數(shù)從大到小輸出(用指針作函數(shù)的參數(shù))續(xù),void swap(int *p1, int *p2){ int *p; *p=*p1; *p
19、1=*p2; *p2=*p;}main(){ int a,b; int *pointer_1,*pointer_2; a=5; b=9; pointer_1=&a; pointer_2=&b; if(a<b) swap(pointer_1,pointer_2); cout<<a<<b;},運行結(jié)果:9,9,加兩語句改正in
20、t x;int *p=&x;x;,5,9,2000,2002,9,9,COPY,假設(shè)2000,指針變量在使用前必須賦值!,例8.5 注意:指針變量要先賦值后,才能進行指針運算!,編譯警告!結(jié)果有時也正確!但也有錯的時候!,swap(int x,int y){ int t; t=x; x=y; y=t;}main(){ int a,b; int *pointer_1,*pointer
21、_2; cin>>a>>b; pointer_1=&a; pointer_2=&b; if(a<b) swap(*pointer_1,*pointer_2); cout<<a<<b;},運行結(jié)果:5,9也不能達到預(yù)期的結(jié)果!,值傳遞,5,9,2000,2002,COPY,5,5,9,例8.5 錯誤程序之二,swap(int *
22、p1, int *p2){ int *p; p=p1; p1=p2; p2=p;}main(){ int a,b; int *pointer_1,*pointer_2; cin>>a>>b; pointer_1=&a; pointer_2=&b; if(a<b) swap(pointer_1,pointer_2);
23、 cout<<a<<b;},5,9,2000,2002,COPY,2000,地址傳遞,2000,2002,運行結(jié)果:5,9也不能達到預(yù)期的結(jié)果!,例8.5 錯誤程序之三,數(shù)組名是表示數(shù)組首地址的地址常量!,8.3 數(shù)組和指針,一維數(shù)組和數(shù)組元素的地址,一個整數(shù)在內(nèi)存中占兩個連續(xù)的存儲單元,排在前面的那個存儲單元的地址就是這個整數(shù)的地址;長整數(shù)、實數(shù)……數(shù)組元素的地址同上。數(shù)組中的若干個數(shù)組元素
24、在內(nèi)存中是依次連續(xù)存放的,占一片連續(xù)的內(nèi)存單元,其中排在前面的那個數(shù)組元素的地址就是這個數(shù)組的地址。,例8.7 數(shù)組以及各個數(shù)組元素在內(nèi)存中的地址,void main(){int i, a[10];cout<< "index, Address, size:\n" ;for( i = 0; i < 10; i++ )cout<< " &a[" &
25、lt;<i<< "], " <<&a[i]<<" "<<sizeof( a[i])<<endl ; cout<< "Address of a ="<<a<<endl;cout<< "size of a ="<<siz
26、eof(a)<<endl; },程序運行結(jié)果如下(VC): index, Address, size:&a[ 0 ], 0x12ff54, 4&a[ 1 ], 0x12ff58, 4&a[ 2 ], 0x12ff5c, 4&a[ 3 ], 0x12ff60, 4&a[ 4 ], 0x12ff64, 4&a[ 5 ], 0x12ff68, 4&a[ 6
27、], 0x12ff6c, 4&a[ 7 ], 0x12ff70, 4&a[ 8 ], 0x12ff74, 4&a[ 9 ], 0x12ff78, 4Address of a = 0x12ff54size of a = 40,在C++語言中,一維數(shù)組的任何一個元素的地址,都可以用其數(shù)組名加上一個偏移量來表示。 即: &a[i]??a+i *&a[i] ?? a[i
28、]??*(a+i),a[i] ? p[i] ? *(p+i) ?*(a+i),2. 通過指針引用數(shù)組元素,int a[10],*p=&a[0];,a=a+1; × a++;×,p=p+1; √ p++; √,void main(){int a[5],*pa,i;for(i=0;i<5;i++)a[i]=i+1;pa=a;for(i=0;i<5;i++) cout<<
29、"*(pa+"<<i<<"):"<<*(pa+i)<<endl;for(i=0;i<5;i++) cout<<"*(a+"<<i<<"):"<<*(a+i)<<endl;for(i=0;i<5;i++) cout<
30、<"pa["<<i<<"]:"<<<<pa[i]<<endl;for(i=0;i<5;i++) cout<<"a["<<i<<"]:"<<a[i]<<endl; },例 數(shù)組元素的引用方法,數(shù)組名作函
31、數(shù)參數(shù),實參與形參的對應(yīng)關(guān)系,3. 數(shù)組名或指針作形參,void inv(int x[], int n){ int t,i,j,m=(n-1)/2; for(i=0;i<=m;i++) { j=n-1-i; t=x[i]; x[i]=x[j]; x[j]=t; }}main(){ int i,a[10]={3,7,9,11,0,6,7,5,4,2}; inv(a,1
32、0); cout<<"The array has been reverted:\n"; for(i=0;i<10;i++) cout<<a[i]; cout<<endl;},m=4,例 將數(shù)組a中的n個整數(shù)按相反順序存放,1. 實參與形參均用數(shù)組,例 將數(shù)組a中的n個整數(shù)按相反順序存放,void inv(int *x, int n
33、){ int t,*p,*i,*j,m=(n-1)/2; i=x; j=x+n-1; p=x+m; for(;i<=p;i++,j--) { t=*i; *i=*j; *j=t; }}main(){ int i,a[10]={3,7,9,11,0,6,7,5,4,2}; inv(a,10); cout<<"The array has been rev
34、erted:\n"; for(i=0;i<10;i++) cout<<a[i]; cout<<endl;},2. 實參用數(shù)組,形參用指針變量,例 將數(shù)組a中的n個整數(shù)按相反順序存放,void inv(int *x, int n){ int t,*i,*j,*p,m=(n-1)/2; i=x; j=x+n-1; p=x+m; for(;
35、i>*p; p=a; inv(p,10); cout<<"The array has been reverted:\n"; for(p=a;p<a+10;p++) cout<<*p;},3. 實參與形參均用指針變量,例 將數(shù)組a中的n個整數(shù)按相反順序存放,void inv(int x[], int n){ int t
36、,i,j,m=(n-1)/2; for(i=0;i>*p; p=a; inv(p,10); cout<<"The array has been reverted:\n"; for(p=arr;p<arr+10;p++) cout<<*p;},4. 實參用指針變量,形參用數(shù)組,int *p 與 int q[10]
37、 數(shù)組名是指針(地址)常量p=q; p+i 是q[i]的地址數(shù)組元素的表示方法:下標(biāo)法和指針法, 即若p=q, 則 p[i] ? q[i] ? *(p+i) ? *(q+i) 形參數(shù)組實質(zhì)上是指針變量,即int q[ ] ? int *q在定義指針變量(不是形參)時,不能把int *p 寫成int p[];系統(tǒng)只給p分配能保存一個指針值的內(nèi)存區(qū)(一
38、般2字節(jié));而給q分配2*10字節(jié)的內(nèi)存區(qū),一級指針變量與一維數(shù)組的關(guān)系,a+i=a[i]=*(a+i) =&a[i][0], 值相等,含義不同a+i 表示第i行首地址,指向行a[i] ? *(a+i) ? &a[i][0],表示第i行第0列元素地址,指向列,對二維數(shù)組 int a[3][4],有a-----二維數(shù)組的首地址,即第0行的首地址a+i-----第i行的首地址a[i] ? *(a+i)--
39、----第i行第0列的元素地址a[i]+j ? *(a+i)+j -----第i行第j列的元素地址*(a[i]+j) ? *(*(a+i)+j) ? a[i][j],8.4.5 指針與二維數(shù)組 1. 二維數(shù)組和數(shù)組元素的地址,二維數(shù)組元素表示形式:(1)a[1][2](2)*(a[1]+2)(3)*(*(a+1)+2)(4)*(&a[0][0]+1*4+2),,地址表示:(1) a+1 (2) &
40、amp;a[1][0](3) a[1](4) *(a+1)(5)(int *) (a+1),,地址表示:(1) &a[1][2](2) a[1]+2(3) *(a+1)+2(4)&a[0][0]+1*4+2,main(){int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int *p; for(p=a[0];p<a[0]+12;p++)
41、 { if((p-a[0])%4==0) cout<<endl; cout<<*p; }},例 用指針變量指向二維數(shù)組的數(shù)組元素,( )不能少(*p)說明p是一個指針變量!,(*p)[4]說明p的值是某個包含4個元素的一維數(shù)組的首地址,p是行指針,p指向的一維數(shù)組的元素個數(shù)和二維數(shù)組列數(shù)必須相同,定義形式: 數(shù)據(jù)類型 (*指針名)[一維數(shù)組
42、的元素個數(shù)]; 例 int (*p)[4];,2. 通過建立指針數(shù)組和行指針引用二維數(shù)組(),指針數(shù)組: 如 int a[3][4], *q[4]; q[0]=&a[0][0]; q[1]=&a[1][0];,可讓p指向二維數(shù)組某一行如 int a[3][4], (*p)[4]; p=a;,main(){ static int a[3][4]={1
43、,3,5,7,9,11,13,15,17,19,21,23}; int i,j,(*p)[4]; for(p=a,i=0;i<3;i++,p++) for(j=0;j<4;j++) cout<<*(*p+j); cout<<endl;},p=a[0]; p=*a; p=&a[0][0];
44、p=a; ? p=&a[0];,? p[0][j],例 指向一維數(shù)組的指針變量(行指針)應(yīng)用,?for(p=a,p<a+3;p++),3. 二維數(shù)組名或行指針作函數(shù)的形參,通過指針引用二維數(shù)組的幾種形式:,例 3個學(xué)生各學(xué)4門課,計算總平均分,并輸出第n個學(xué)生成績,main(){ void average(float *p,int n); void search(float (*p)[4],int
45、n); float score[3][4]={{65,67,79,60},{80,87,90,81},{90,99,100,98}}; average(*score,12); search(score,2);},void average(float *p,int n){ float *p_end, sum=0,aver; p_end=p+n-1; for(;p<=p_end;p++)
46、sum=sum+(*p); aver=sum/n; cout<<"average=“<<aver;}void search(float (*p)[4], int n){ int i; cout<<" No:“<<n; for(i=0;i<4;i++) cout<<*(*(p+n)+i);},列指針
47、,行指針,函數(shù)說明,float p[][4],*(*(p+n)+i) ? p[n][i],例 3個學(xué)生各學(xué)4門課,計算總平均分,并查找一門以上課 不及格學(xué)生, 輸出其各門課成績,*(*(p+j)+i) ? p[j][i],如有: int a[5][10],(*p)[10]; p = a ;系統(tǒng)給數(shù)組a分配2*5*10個字節(jié)的內(nèi)存區(qū)。系統(tǒng)只給變量p分配能保存一個指針值的內(nèi)存區(qū)(2字節(jié));數(shù)組名a的值是一個指向有
48、10個元素的一維數(shù)組的指針常量;p=a+i 使 p指向二維數(shù)組的第i行;*(*(p+i)+j) ? a[i][j] ;二維數(shù)組形參實際上是一個指向一維數(shù)組的指針變量, 即: fun(int x[ ][10]) ? fun(int (*x)[10]) 在函數(shù)fun中兩者都可以有x++;x=x+2;等操作! 但在變量定義(不是形參)時,兩者不等價;,二維數(shù)組與指向一維數(shù)組
49、的指針變量的關(guān)系,int **p 與 int *q[10] 系統(tǒng)只給p分配能保存一個指針值的內(nèi)存區(qū);而給q分配10個內(nèi)存區(qū),每個內(nèi)存區(qū)均可保存一個指針值 ;指針數(shù)組名是二級指針常量;p=q; p+i 是q[i]的地址;指針數(shù)組作形參,int *q[ ]與int **q完全等價;但作為變量定義兩者不同。,指針數(shù)組與二級指針的關(guān)系,例 main( ) { char string[
50、]=“I love China!”; cout<<string<<endl; cout<<string+7; },1. 字符串表示形式(1) 用字符數(shù)組實現(xiàn),8.4 指針與字符串,例 main( ) { char *string="I love China!"; c
51、out<<string<<endl; string+=7; while(*string) { putchar(string[0]); string++; } },字符指針初始化:把字符串首地址賦給string相當(dāng)于以下兩個語句: ch
52、ar *string; string="I love China!";,*string!=0,(2) 用字符指針實現(xiàn),*string,例 字符串復(fù)制,(1)用字符數(shù)組 作參數(shù),void copy_string(char from[],char to[]){ int i=0; while(from[i]!='\0') { to[i]=from
53、[i];i++; } to[i]='\0';}main(){ char a[]="I am a teacher."; char b[]="You are a student."; cout<<"string_a="<<a<<" string_b="<<b;
54、 copy_string(a,b); cout<<"string_a="<<a<<" string_b="<<b;},2. 用指向字符串的指針作函數(shù)參數(shù),例10.19 實現(xiàn)字符串復(fù)制,void copy_string(char *from,char *to){ for(;*from!='\0';from++,to++)
55、 *to=*from; *to='\0';}void main(){ char *a="I am a teacher.123456789"; char b[80]="You are a student."; cout<<"string_a="<<a<<endl;cout<<&quo
56、t; string_b="<<b<<endl; copy_string(a,b); cout<<"string_a="<<a<<endl;cout<<" string_b="<<b<<endl;},(2) 用字符指針變量作參數(shù),注意:數(shù)組b要有足夠的存儲空間!,例 char
57、str[10]; cin>>str (?)而 char *cp; cin>> cp; (?),改為: char *cp,str[10]; cp=str;cin>>cp; (?),3. 字符指針變量與字符數(shù)組的分別,char str[]={“Hello!”}; (?)ch
58、ar str[]=“Hello!”; (?)char str[]={‘H’,‘e’,‘l’,‘l’,‘o’,‘!’}; (?)char *cp=“Hello”; (?)int a[]={1,2,3,4,5}; (?)int *p={1,2,3,4,5};
59、 (?),char str[10],*cp;int a[10],*p;str=“Hello”; (?)cp=“Hello!”; (?)a={1,2,3,4,5}; (?)p={1,2,3,4,5}; (?),字符串用一維字符數(shù)組存放;一維字符數(shù)組中若有一個元素的值為0,則該數(shù)組可當(dāng)字符串用;字符數(shù)組具有一維數(shù)組的所有特點;數(shù)組名是指向數(shù)組首地址的地
60、址常量;數(shù)組元素的引用方法可用指針法和下標(biāo)法;數(shù)組名作函數(shù)參數(shù)是地址傳遞等;區(qū)別存儲格式:字符串結(jié)束標(biāo)志;賦值方式與初始化;輸入輸出方式:%s %c,4. 字符串與數(shù)組的關(guān)系,char str[80];scanf(“%s”,str);printf(“%s”,str);gets(str);puts(str);,例 對字符串排序(簡單選擇排序),main(){ void sort(char *name[]
61、,int n), print(char *name[],int n); char *name[]={"Follow me","BASIC", "Great Wall","FORTRAN","Computer "}; int n=5; sort(name,n); print(name,n);}
62、void sort(char *name[],int n){ char *temp; int i,j,k; for(i=0;i0) k=j; if(k!=i) { temp=name[i]; name[i]=name[k]; name[k]=temp;} }},例 對字符串排序,void print(char *name[],int n){ int i=0;
63、 char *p; /*p=name[0];*/ while(i<n) { p=*(name+i++);printf("%s\n",p); }},#define NULL 0void main(){ char **p; char *name[]={"hello","good","world&
64、quot;,"bye",""}; p=name+1; printf("%o : %s ", *p,*p); p+=2; while(**p!=NULL) printf("%s\n",*p++);},運行結(jié)果:644 : good bye,用*p可輸出地址(%o或%x), 也可用它輸出字符串(%s),
65、?*(p++)右結(jié)合,例 用二級指針處理字符串,函數(shù)指針變量賦值:如p=max;,函數(shù)返回值的數(shù)據(jù)類型,專門存放函數(shù)入口地址可指向返回值類型相同的不同函數(shù),指向函數(shù)的指針變量定義形式: 數(shù)據(jù)類型 (*指針變量名)(); 如 int (*p)( );,函數(shù)指針變量指向的函數(shù)必須有函數(shù)說明,函數(shù)調(diào)用形式: c=max(a,b); ? c=(*p)(a,b); ? c=p (a,b);對函數(shù)指針變量p?n, p++, p
66、--無意義,( )不能省int (*p)() 與 int *p()不同,函數(shù)指針:函數(shù)被存放在內(nèi)存中一片連續(xù)的存儲單元內(nèi),其中排在最前面的那個存儲單元的地址就是這個函數(shù)的地址,也叫函數(shù)指針,用函數(shù)名表示,它是一個地址常量。,8.7 指針與函數(shù),main(){ int max(int ,int); int a,b,c; scanf("%d,%d",&a,&b); c=ma
67、x(a,b); printf("a=%d,b=%d,max=%d\n",a,b,c);} int max(int x,int y){ int z; if(x>y) z=x; else z=y; return(z);},main(){ int max(int ,int), (*p)(); int a,b,c; p=max; scanf(&quo
68、t;%d,%d",&a,&b); c=(*p)(a,b); printf("a=%d,b=%d,max=%d\n",a,b,c);}int max(int x,int y){ int z; if(x>y) z=x; else z=y; return(z);},1. 用指向函數(shù)的指針變量調(diào)用函數(shù),例 用函數(shù)指針變量作參數(shù),求最大值、
69、最小值和兩數(shù)之和,2. 用指向函數(shù)的指針變量作函數(shù)參數(shù),函數(shù)定義形式: 類型標(biāo)識符 *函數(shù)名(參數(shù)表);例 int *f(int x, int y),3. 返回指針值的函數(shù),例 用指針函數(shù)實現(xiàn):有若干學(xué)生成績,要求輸入學(xué)生序號后,能輸出其全部成績。,main(){ float score[][4]={{60,70,80,90}, {56,89,67,88},{34,78,90,66}}; f
70、loat *search(float (*pointer)[4],int n), *p; int i,m; printf("Enter the number of student:"); scanf("%d",&m); printf("The scores of No.%d are:\n",m); p=search(scor
71、e,m); for(i=0;i<4;i++) printf("%5.2f\t",*(p+i));}float *search(float (*pointer)[4], int n){ float *pt; pt=*(pointer+n); return(pt);},1.指針變量是把其它變量的地址作為內(nèi)容的變量。指針變量的內(nèi)容可以是0、NULL和一個確定的地址
72、。2. 地址運算符(&) 返回其操作數(shù)的地址。 地址運算符的操作數(shù)必須是一個變量(或數(shù)組元素)。3. 指針運算符(*) 又稱為“間接引用運算符” ,它表示從相應(yīng)的存儲單元中獲取某種類型的數(shù)據(jù)值。4. 指針±整數(shù)5. 指針1-指針26. 指針的關(guān)系運算,如:指針1<指針27. 在調(diào)用帶有參數(shù)的函數(shù)時,如果調(diào)用函數(shù)要求被調(diào)用函數(shù)修改參數(shù)的值,應(yīng)該把參數(shù)的地址傳遞給被調(diào)用函數(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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c++程序設(shè)計教程
- c++程序設(shè)計教程第二版
- c++程序設(shè)計教程_1-
- c++程序設(shè)計教程2-
- c++程序設(shè)計教程與實驗指導(dǎo)
- c++程序設(shè)計
- c++程序設(shè)計
- 譚浩強c++程序設(shè)計(ppt版)
- 《程序設(shè)計基礎(chǔ)(c++)》實驗教程及完整答案
- 《程序設(shè)計基礎(chǔ)c++》
- [工學(xué)]c++程序設(shè)計
- c c++程序設(shè)計課后答案
- c++程序設(shè)計復(fù)習(xí)筆記
- c++課程設(shè)計--c++程序設(shè)計語言
- c++課程設(shè)計-- c++面向?qū)ο蟪绦蛟O(shè)計
- c++程序設(shè)計考試系統(tǒng)
- c++程序設(shè)計考試系統(tǒng)
- c++程序設(shè)計模擬試題
- c++程序設(shè)計-實踐報告
- c++簡單程序設(shè)計
評論
0/150
提交評論