理解C指针以及多级指针

2021-04-25  本文已影响0人  东也_

&: 取址符

*加变量名:可以理解为取值符,因为指针变量里面存的是一个指针,所以要取地址所存储的值;

例:

    int a  = 10;
    int *b = &a;
    int **c = &b;

    printf(" a == %d  a的值 \n ",a);
    printf("&a == %d   a的地址\n", &a);
    
    printf(" b == %d b变量的值存储的a的地址\n",b);
    printf("&b == %d b变量的地址\n ", &b);
    printf("*b == %d 存储的地址所指向的值也就是a的值\n", *b);
    
    printf(" c == %d c变量的值存储的b的地址\n",c);
    printf("&c == %d c变量的地址\n",&c);
    printf("*c === %d 因为c存储的是b的地址,然后通过b的地址找到它所存储的值,也就是a的地址",*c);
    printf("**c == %d 因为*c的值是a地址,所以**c就是a地址所指向的值 也就是a的值\n",**c);

打印结果:

a == 10 -------- a的值
&a == -361778052 -------- a的地址
b == -361778052 -------- b变量的值存储的a的地址
&b == -361778064 -------- b变量的地址
*b == 10 -------- 存储的地址所指向的值也就是a的值
c == -361778064 -------- c变量的值存储的b的地址
&c == -361778072 -------- c变量的地址
c === -361778052 -------- 因为c存储的是b的地址,然后通过b的地址找到它所存储的值,也就是a的地址
c == 10 -------- 因为c的值是a地址,所以
c就是a地址所指向的值 也就是a的值

记住三个点:

  1. 定义一个指针,赋值的时候需要的是一个指针地址
  2. 每个变量本身都有会有一个地址;
  3. 通过*加变量名就是获取存储的地址所指向的值,通常说的是解引用;

三级指针在赋值时候就需要二级指针的变量地址了,以此类推,无限套娃;多看几遍就会理解了;

上一篇下一篇

猜你喜欢

热点阅读