一個指針變量可以指向整型變量、實型變量、字符類型變量,當然也可以指向指針類型變量。當這種指針變量用于指向指針類型變量時,我們稱之為指向指針的指針變量,這話可能會感到有些繞口,但你想到一個指針變量的地址就是指向該變量的指針時;這種雙重指針的含義就容易理解了。下面用一些圖來描述這種雙重指針,見圖6-13。
在圖中,整型變量i的地址是&i,將其傳遞給指針變量p,則p指向i;實型變量j的地址是&j,將其傳遞給指針變量p,則p指向j;字符型變量ch的地址是&ch,將其傳遞給指針變量p,則p指向ch;整型變量x的地址是&x,將其傳遞給指針變量p2,則p2指向x,p2是指針變量,同
時,將p2的地址&p2傳遞給p1,則p1指向p2。這里的p1就是我們談到的指向指針變量的指針變量,即指針的指針。
指向指針的指針變量定義如下:
類型標識符**指針變量名
例如:float**ptr;
其含義為定義一個指針變量ptr,它指向另一個指針變量(該指針變量又指向一個實型變量)。由于指針運算符“*”是自右至左結合,所以上述定義相當于:
float*(*ptr);
下面看一下指向指針變量的指針變量怎樣正確引用。
[例6-27]用指向指針的指針變量訪問一維和二維數(shù)組。
#include
#include
main()
{
int a[10],b[3][4],*p1,*p2,**p3,i,j;/是*p指3向指針的指針變量*/
for(i=0;i<10;i++)
scanf("%d",&a[i]);/*一維數(shù)組的輸入*/
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&b[i][j]);/*二維數(shù)組輸入*/
for(p1=a,p3=&p1,i=0;i<10;i++)
printf("M",*(*p3+i));/*用指向指針的指針變量輸出一維數(shù)組*/
printf("\n");來源:www.examda.com
for(p1=a;p1-a<10;p1++)/*用指向指針的指針變量輸出一維數(shù)組*/
{
p3=&p1;
printf("M",**p3);
}
printf("\n");
for(i=0;i<3;i++)/*用指向指針的指針變量輸出二維數(shù)組*/
{
p2=b[i];
p3=&p2;
for(j=0;j<4;j++)
printf("M",*(*p3+j));
printf("\n");
}
for(i=0;i<3;i++)/*用指向指針的指針變量輸出二維數(shù)組*/
{
p2=b[i];
for(p2=b[i];p2-b[i]<4;p2++)
{
p3=&p2;
printf("M",**p3);
}
printf("\n");
}
}
程序的存儲示意如圖6-14所示,對一維數(shù)組a來說,若把數(shù)組的首地址即數(shù)組名賦給指針變量p1,p1就指向數(shù)組a,數(shù)組的各元素用p1表示為,*(p1+i),也可以簡化為*p1+i表示。
希望與更多計算機等級考試的網(wǎng)友交流,請進入計算機等級考試論壇
更多信息請訪問:考試吧計算機等級考試欄目
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |