C語言 二級指針
二級指針是指向指針的指針,指針在內(nèi)存中也有自己的存儲空間,指針的地址也可以存儲在另外一個指針中,這一指針稱為二級指針,如圖所示。
從圖中可看出,指針p的內(nèi)存空間中存儲的是變量a的地址,而指針q中存儲的是指針p的存儲空間,可以認(rèn)為指針q指向指針p。q就是一個二級指針,也稱為指向指針的指針。
1.二級指針的定義
二級指針的定義形式為:
類墊標(biāo)識符 **指針變通[, **指針變避2……];
例如:
int **pm,**pn;
定義兩個二級指針pm、pn。
2.二級指針的賦值
例如已經(jīng)定義二級指針pm,則對pm的賦值為:
pm=&p/*p是一個普逾指針._*/
【例題】利用二級指針輸入、輸出變量的值
程序如下:
#include <stdio.h>
main()
{
int a;
int *p;
int **q;
p=&a;
q=&p;
scanf("%d",*q);
printf("%d %d %d\n",a,*p,**q); /* 以不同形式輸出變逛 a 的值 */
}
程序中scanf()語句對*q輸入,q中存放的是p的內(nèi)容,而指針p的內(nèi)容為變量a的地址,所以“*q”代表了a的地址。
有時也可以讓二級指針指向二維數(shù)組,使二維數(shù)組的操作更為方便。
【例題】利用二級指針輸出字符串?dāng)?shù)組中的內(nèi)容
程序如下:
#include 〈stdio.h〉
main()
{
char *name[5]={"fbeijing","tianjin","hebei","shandong","hunan"};
char **p?name; /*令二級指針指向二維數(shù)組數(shù)組名*/
int i=O;
for(i-0;i<5;i++,p++) /*二級指針移動,不斷指向數(shù)組每一行*/
puts(*p);
}
程序執(zhí)行時,輸出結(jié)果為:
beijing
tianjin
hebei
shandong
hunan
程序中,二級指針p執(zhí)行字符串?dāng)?shù)組的首地址,當(dāng)p+1時,移動一整行,執(zhí)行數(shù)組第二行的首地址,從而實現(xiàn)利用二級指針輸出各個字符串。
點(diǎn)擊加載更多評論>>