在C语言中。二级指针时指向指针的指针。换句话说,就是一个二级指针变量存储另一个指针变量的地址。
目录
1、二级指针的声明
2、二级指针的使用
2.1、赋值
2.2、访问二级指针所指向的指针及值
2.3、二级指针的算数操作
3、二级指针与数组
4、二级指针与函数
5、注意事宜
6、总结
1、二级指针的声明
int **pptr; /* 声明一个指向整型指针的二级指针 */
2、二级指针的使用
2.1、赋值
int var = 100;
int *ptr = &var; /* 一级指针,指向var */
int **pptr = &ptr; /* 二级指针,指向ptr */
2.2、访问二级指针所指向的指针及值
要访问二级指针所指向的一级指针的值,需要进行两次解引用:
printf("%d", **pptr); /* 首先解引用pptr得到ptr,然后解引用ptr得到var的值,即100 */
2.3、二级指针的算数操作
通常情况下,不建议不鼓励对二级指针进行算术操作,因为这样做没有实际意义,且易容易犯错。
3、二级指针与数组
二级指针可以用来表示数组的指针。例如:一个二维数组的元素是一维数组,其行指针可以存储在一个指针数组中,而这个指针数组的地址可以用一个二级指针表示。
#include <stdio.h>int main() {int numbers[5] = {100, 200, 300, 400, 500}; // 声明一个整型数组int *ptrs[5]; // 声明一个指针数组,用于存储指向整型的指针int **pptrs; // 声明一个二级指针// 初始化指针数组,使每个指针指向数组numbers的一个元素for (int i = 0; i < 5; i++) {ptrs[i] = &numbers[i];}// 初始化二级指针,使其指向指针数组pptrs = ptrs;// 使用二级指针访问数组元素for (int i = 0; i < 5; i++) {printf("%d\n",**(pptrs + i));}return 0;
}
运行结果如下:
100
200
300
400
500
4、二级指针与函数
二级指针可以作为参数传递给函数,并修改一级指针的值:
#include <stdio.h>void changePointer(int **pp, int *newPtr) {*pp = newPtr; // 修改pp所指向的一级指针的值
}int main() {int var = 12;int *ptr = &var; /* var地址传递给指针ptr */int anotherVar = 25;int *newPtr = &anotherVar; /* anotherVar的地址传递给newPtr指针 */ int **pptr = &ptr; /* 声明一个二级指针指向指针ptr */changePointer(pptr, newPtr); // 修改pptr所指向的指针printf("%d", *ptr); // 输出25,因为ptr现在指向anotherVarreturn 0;
}
输出结果如下:
25
5、注意事宜
a、二级指针的使用相对较少,通常只在处理指针数组或需要修改指针本身的情况下使用
b、在使用二级指针时,必须确保指针正在初始化和解引用是正确的,以避免未定位的行为。
6、总结
既然二级指针的使用较少,那为什么又要专门编写此章节呢?这也是最近一位考证的学子最近在询问该类问题,索性就写了这两张内容。也算是对知识的一个总结吧。