C语言学习笔记——指针(二级指针和n级指针)

今天学习了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 
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这种形式

你可能感兴趣的:(C语言学习笔记——指针(二级指针和n级指针))