一,、指針數(shù)組的概念如果一個(gè)數(shù)組,其元素均為指針類(lèi)型數(shù)據(jù),該數(shù)組稱(chēng)為指針數(shù)組,也就是說(shuō),指針數(shù)組中的每一個(gè)元素相當(dāng)于一個(gè)指針變量,它的值都是地址?一維指針數(shù)組的定義形式為 類(lèi)型名*數(shù)組名[數(shù)組長(zhǎng)度];例如 int *p[4]; 可以用指針數(shù)組中各個(gè)元素分別指向若干個(gè)字符串,使字符串處理更加方便靈活? 例6.15 若干字符串按字母順序(由小到大)輸出? #include using namespace std; int main( ) { void sort(char *name[],int n); //聲明函數(shù) void print(char *name[],int n); //聲明函數(shù) char *name[]={″BASIC″,″FORTRAN″,″C++″,″Pascal″,″COBOL″}; //定義指針數(shù)組 int n=5; sort(name,n); print(name,n); return 0; } void sort(char *name[],int n) { char *temp; int i,j,k; for(i=0;i<> { k=i; for(j=i+1;j<> if(strcmp(name[k],name[j])>0) k=j; if(k!=i) { temp=name[i];name[i]=name[k];name[k]=temp;} } } void print(char *name[],int n) { int i; for(i=0;i<> cout<<><> } 運(yùn)行結(jié)果為 BASIC COBOL C++ FORTRAN Pascal 圖6.21 圖6.22 print函數(shù)的作用是輸出各字符串?name[0]~name[4]分別是各字符串的首地址?print函數(shù)也可改寫(xiě)為以下形式: void print(char *name[],int n) { int i=0 char *p; p=name[0]; while(i<> { p=*(name+i++); cout<<><> } } 其中“*(name+i++)”表示先求*(name+i)的值,即name[i](它是一個(gè)地址)?將它賦給p,然后i加1?最后輸出以p地址開(kāi)始的字符串? 二,、指向指針的指針在掌握了指針數(shù)組的概念的基礎(chǔ)上,下面介紹指向指針數(shù)據(jù)的指針,簡(jiǎn)稱(chēng)為指向指針的指針?從圖6.22可以看到,name是一個(gè)指針數(shù)組,它的每一個(gè)元素是一個(gè)指針型數(shù)據(jù)(其值為地址),分別指向不同的字符串?數(shù)組名name代表該指針數(shù)組首元素的地址?name+i是name[i]的地址?由于name[i]的值是地址(即指針),因此name+i就是指向指針型數(shù)據(jù)的指針?還可以設(shè)置一個(gè)指針變量p,它指向指針數(shù)組的元素(見(jiàn)圖6.23)?p就是指向指針型數(shù)據(jù)的指針變量?圖6.23 怎樣定義一個(gè)指向指針數(shù)據(jù)的指針變量呢?如下: char *(*p); 從附錄B可以知道,*運(yùn)算符的結(jié)合性是從右到左,因此“char *(*p);”可寫(xiě)成 char **p; 例6.16 指向字符型數(shù)據(jù)的指針變量? #include using namespace std; int main( ) { char **p; //定義指向字符指針數(shù)據(jù)的指針變量p char *name[]={″BASIC″,″FORTRAN″,″C++″,″Pascal″,″COBOL″}; p=name+2; //見(jiàn)圖6.23中p的指向 cout<<*p< cout<<**p< } 運(yùn)行結(jié)果為 C++ C 指針數(shù)組的元素也可以不指向字符串,而指向整型數(shù)據(jù)或單精度型數(shù)據(jù)等? 在本章開(kāi)頭已經(jīng)提到了“間接訪問(wèn)”一個(gè)變量的方式?利用指針變量訪問(wèn)另一個(gè)變量就是“間接訪問(wèn)”?如果在一個(gè)指針變量中存放一個(gè)目標(biāo)變量的地址,這就是“單級(jí)間址”,見(jiàn)圖6.24(a)?指向指針的指針用的是“二級(jí)間址”方法?見(jiàn)圖6.24(b)?從理論上說(shuō),間址方法可以延伸到更多的級(jí),見(jiàn)圖6.24(c)?但實(shí)際上在程序中很少有超過(guò)二級(jí)間址的? 圖6.24 <> |
|
來(lái)自: pure_water > 《c 》