首页 > 编程笔记

C语言二级指针(指向指针的指针)的用法

由于C语言指针是一个变量,在内存中占据一定的空间,并且具有一个地址,所以这个地址也可以利用指针来保存。我们可以声明一个指针来指向它,这个指针称为指向指针的指针,也称为二级指针。

一般来说,声明指向指针的指针的形式如下:

存储类型数据类型**指针变量名

其中,参数说明如下。

例如,下面语句声明了一个指向指针的指针 pp,其指向指针 p:

int i,*p=&i;
int **pp=&p;

可以看出,指向指针的指针中存储的是指针变量的地址。

【示例1】定义一个指向指针的指针 pp。C语言代码如下:
#include <stdio.h>
int main()
{
    int a;
    int *p=&a;      /* 定义整型指针p并初始化 */
    int **pp=&p;    /* 定义指向指针的指针pp,并初始化 */
    a=10;
    printf ("a=  %d\n",a);  /* 输出a、p、pp等值 */
    printf ("p=  %d\n",p);
    printf ("*p=  %d\n",*p); 
    printf ("*pp=  %d\n",*pp);
    printf ("**pp=  %d\n",**pp); 
}
运行结果:

a=  10
p=  6487572
*p=  10
*pp=  6487572
**pp=  10

该示例定义了指针 p 和指向指针的指针 pp,其中,p 指向整型变量 a。pp 指向 p,该程序输出了 p 和 pp 的各种值。

上述程序中 p 指向的是变量 a,因此 *p 的值为 10,p 的值为变量a的存储地址。而 pp 指向指针 p,因此 *pp 的地址为指针 p 的值,即变量 a 的存储地址,而 **pp 才是变量 a 的值,也即 10。这就符合了上述输出结果。

优秀文章