#include <stdio.h> void changeAddress(int** value); int main() { int arr[] = {1, 2, 3}; int* p = arr; // 改变之前 p 的地址 printf("%p ", p); // q 用来保存改变之前 p 的地址 int* q = p; changeAddress(&p); // 改变之后 p 的地址 printf("%p ", p); // 地址改变的差值 printf("%lu ", p - q); return 0; } void changeAddress(int** value) { *value += sizeof(int); }
效果图
没错, 如果说一级指针是用于对数据的更新, 那么二级指针就是用于对数据地址的更新. 以此类推, 三级指针就是对数据地址的地址的更新…
原文链接是:https://blog.csdn.net/qq_42957923/article/details/86927786
这里有个原创,然你感受一下关联的一个一级指针和二级指针。下图左边是代码,右边是一级指针和二级指针的值。
int a; //a是一个int类型的变量,它的值是一个整数
int *pa = &a; //pa 是一个int *类型的变量,它的值是一个int型变量的地址
int **ppa = &pa; //ppa是一个int **型的变量,它的值是一个int *型变量的地址
通过打印出,一维指针和二维指针,我们可以看到这里面的所有的值的变化,通过二维指针可以修改这个二维指针指向的一维指针所指向的地址。这就是精华所在了。定义二维指针的时候,我们需要明确一点就是,这个定义的二维指针必须要指向一维指针。