美文网首页
c基础 - 二级指针和多级指针

c基础 - 二级指针和多级指针

作者: 世道无情 | 来源:发表于2019-03-02 05:54 被阅读0次

前言

变量:就是给内存地址取一个别名;

1. 二级指针

二级指针:就是对一级指针再取地址;

2. 代码如下:

#include<stdio.h>  // 第一步:导入头文件

// 程序主入口
void main(){

    // 二级指针:就是对一级指针取地址
    
    int num = 12;
    // int*: 是指针,用于接收num地址返回值  &:获取地址
    int* p = &num;

    // int**:表示对p取地址 
    int** s_p = &p;
    // 意思就是:s_p存的是p的地址 p存的是num的地址

    // s_p的值是:0x0042FBC4, 上边存储的是p的地址0042fbd0
    // p的地址:刚好就是0042fbd0,p上边存储的值0042fbd0,
    // 0042fbd0就是num的地址,num上边存的值是 +12
    printf("p 的值是:%p , s_p 的值是:%p" , p , s_p);  

    // 如果想知道s_p的地址,可以写成下边代码
    // int*** s_s_p = &s_p; 多级指针

    // 通过二级指针怎么获取到最终的值? s_p (*代表取值)
    printf("获取最终的值是:%d" , **s_p); // 获取最终的值是:12

    // 暂停
    getchar();
}
3. 分析代码

1>:下断点到 printf("p 的值是:%p , s_p 的值是:%p" , p , s_p)前边,然后运行代码;
2>:运行的结果是:p 的值是:0042FBD0 , s_p 的值是:0042FBC4,只看s_p的值,不看p的值;
3>:点击上边的调试 -> 窗口 -> 内存1,把s_p的值粘贴到里边,然后回车;
4>:然后在下边区域,右键 -> 点击4字节 -> 十六进制显示,然后回车,可以看到下边绿色框中的值;


图片.png

5>:然后把 绿色框中的值复制到上边的输入框中,然后回车,然后右键 -> 点击4字节 -> 十六进制显示 -> 带符号显示:


图片.png

6>:上边的结果如下:


图片.png
4. num、p、s_p三者关系如下:

图片.png
分析上边代码:
1>:我们可以首先打印输出 printf("p 的值是:%p , s_p 的值是:%p" , p , s_p)的值,获取到 s_p的值是 0x0042FBC4;
2>:然后 把0x0042FBC4值放到上边,回车后,就变成0042fbd0;
3>:然后 把0042fbd0放到上边,用带符号显示,就变成 +12;

其实这个意思就是:
a: 首先获取到s_p的值,然后通过s_p的值获取到p的值,然后通过p的值获取到num的值;
也就是说 s_p中存储的是p的地址,p中存储的是num的地址

相关文章

网友评论

      本文标题:c基础 - 二级指针和多级指针

      本文链接:https://www.haomeiwen.com/subject/tlyywftx.html