如果一個指針變量存放的又是另一個指針變量的地址,則稱這個指針變量為指向指針的指針變量。在前面已經(jīng)介紹過,通過指針訪問變量稱為間接訪問。由于指針變量直接指向變量,所以稱為“單級間址”。而如果通過指向指針的指針變量來訪問變量則構(gòu)成“二級間址”。
從下圖可以看到,name是一個指針數(shù)組,它的每一個元素是一個指針型數(shù)據(jù),其值為地址。Name是一個數(shù)據(jù),它的每一個元素都有相應(yīng)的地址。數(shù)組名name代表該指針數(shù)組的首地址。
name+1是mane
的地址。name+1就是指向指針型數(shù)據(jù)的指針(地址)。還可以設(shè)置一個指針變量p,使它指向指針數(shù)組元素。P就是指向指針型數(shù)據(jù)的指針變量。
怎樣定義一個指向指針型數(shù)據(jù)的指針變量呢?如下:
char **p;
p前面有兩個*號,相當(dāng)于*(*p)。顯然*p是指針變量的定義形式,如果沒有最前面的*,那就是定義了一個指向字符數(shù)據(jù)的指針變量。現(xiàn)在它前面又有一個*號,表示指針變量p是指向一個字符指針型變量的。*p就是p所指向的另一個指針變量。
從下圖可以看到,name是一個指針數(shù)組,它的每一個元素是一個指針型數(shù)據(jù),其值為地址。name是一個數(shù)組,它的每一個元素都有相應(yīng)的地址。數(shù)組名name代表該指針數(shù)組的首地址。name+1是mane的地址。name+1就是指向指針型數(shù)據(jù)的指針(地址)。還可以設(shè)置一個指針變量p,使它指向指針數(shù)組元素。P就是指向指針型數(shù)據(jù)的指針變量。
如果有: - p=name+2;
- printf(“%o\n”,*p);
- printf(“%s\n”,*p);
p=name+2;printf(“%o\n”,*p);printf(“%s\n”,*p);
則,第一個printf函數(shù)語句輸出name[2]的值(它是一個地址),第二個printf函數(shù)語句以字符串形式(%s)輸出字符串“Great Wall”。
【例10-36】使用指向指針的指針。 - main(){
- char *name[]={'Follow me','BASIC','Great Wall','FORTRAN','Computer desighn'};
- char **p;
- int i;
- for(i=0;i5;i++){
- p=name+i;
- printf('%s\n',*p);
- }
- }
main(){ char *name[]={'Follow me','BASIC','Great Wall','FORTRAN','Computer desighn'}; char **p; int i; for(i=0;i<5;i++){ p="name+i;" printf('%s\n',*p);="">5;i++){>
說明:p是指向指針的指針變量。
【例10-37】一個指針數(shù)組的元素指向數(shù)據(jù)的簡單例子。 - main(){
- static int a[5]={1,3,5,7,9};
- int *num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};
- int **p,i;
- p=num;
- for(i=0;i5;i++){
- printf('%d\t',**p);
- p++;
- }
- }
main(){ static int a[5]={1,3,5,7,9}; int *num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]}; int **p,i; p=num; for(i=0;i<5;i++){ printf('%d\t',**p);="" p++;="">5;i++){>
說明:指針數(shù)組的元素只能存放地址。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。