如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针。
假设有一个 int 类型的变量 a,p1是指向 a 的指针变量,p2 又是指向 p1 的指针变量,它们的关系如下图所示:

int a =100;int *p1 = &a;int **p2 = &p1
指针变量也是一种变量,也会占用存储空间,也可以使用&获取它的地址。
C语言不限制指针的级数,每增加一级指针,在定义指针变量时就得增加一个星号*。
- p1 是一级指针,指向普通类型的数据,定义时有一个*;
- p2 是二级指针,指向一级指针 p1,定义时有两个*。
void getMem(char **p2){*p2 = 400; //间接赋值 p2是p1的地址}void getMem2(char *p2){p2 = 400; // p2跟p1没有关系,不会影响实参}//二级指针void main(){char *p1 = NULL;char **p2 = NULL; //二级指针p1 = 0x11;p2 = 0x22;//直接修改p1的值 (栈)p1 = 0x111;//间接修改p1的值p2 = &p1;*p2 = 100;//间接赋值 p2是p1的地址printf("p1:%d \n", p1); //100getMem(&p1);printf("getMem p1:%d \n", p1); //400getMem2(&p1);printf("getMem2 p1:%d \n", p1); //400system("pause");return;}
