今天学习了C语言中的二级指针和n级指针,总结如下:
int a;
int *ptr_a; //一级指针,直接指向变量的指针
int **ptr_ptr_a; //二级指针,指向指向变量的指针的指针
ptr_a = &a;
ptr_ptr_a = &ptr_a;
//当我们需要给变量a赋值时,可以通过一级或二级指针赋值
*ptr_a = 0;
**ptr_ptr_a = 0;
//这两种方法都会把a赋值成0
//n级指针也像上文一样,如三级指针:***ptr_ptr_ptr_a
另外,二级指针也可通过一级指针实现:
#include <stdio.h>
int main(void)
{
int a;
int *ptr_a,*ptr_ptr_a;
int **ptr;
a=0;
ptr_a = &a;
ptr_ptr_a = (int*)&ptr_a;
ptr = &ptr_a;
// 给A赋值有两种方式:
**ptr = 1;
// 或
*(int*)*ptr_ptr_a = 1; //首先我们通过*ptr_ptr_a取得ptr_ptr_a指针指向的地址的值(就是指针ptr_a的值),将其通过(int*)强制转换成指针类型的数据,对转换得到的地址取值,得到变量a的值。
printf("%d",a);
return 0;
}
具体两种方法的差别请看我在SF的提问:https://segmentfault.com/q/1010000009742021
个人建议不要用(int)ptr_ptr_a这种形式