如果一个指针变量存放的又是另一个指针变量的地址,则称这个变量为指向指针的指针变量或指向指针的指针。如下图所示:
a 为 int 型变量,值为100;p1 指向 a,它的值是 a 的地址;p2 为指向指针的指针,它的值是 p1 的地址。
指向指针的指针定义方式一般为:数据类型 **变量名;
例如:int a =100;int *p1 = &a;int **p2 = &p1;int **p2;可以理解为int *(*p2);。显然 *p2 是指针变量,如果前面没有 *,就是定义了一个指针整型数据的指针变量。现在它前面又有了一个 * 号,表示 p2 指向的是一个整型指针变量。*p2 就是 p2 所指向的另一个指针变量。
请看下面的输出结果:- #include <stdio.h>
- int main(){
- int a =100;
- int *p1 = &a;
- int **p2 = &p1;
- printf("a=%d, p1=%X, &p1=%X\n", a, p1, &p1);
- printf("**p2=%d, *p2=%X, p2=%X\n", **p2, *p2, p2);
- return 0;
- }
运行结果:a=100, p1=28FF44, &p1=28FF40**p2=100, *p2=28FF44, p2=28FF40
指向指针的指针常用在二维数组中。请看下面的例子:- #include <stdio.h>
- int main(){
- char *name[]={
- "Follow me",
- "BASIC",
- "Great Wall",
- "FORTRAN",
- "Computer desighn"
- };
- char **p=name;
- printf("*p=%s\n", *p);
- printf("*(p+1)=%s\n", *(p+1));
- printf("**(p+1)=%c\n", **(p+1));
- printf("**(p+1)=%c\n", *(*(p+2)+3));
- return 0;
- }
运行结果:
*p=Follow me
*(p+1)=BASIC
**(p+1)=B
**(p+1)=a
|
|