前言
变量:就是给内存地址取一个别名;
1. 二级指针
二级指针:就是对一级指针再取地址;
2. 代码如下:
#include<stdio.h> // 第一步:导入头文件
// 程序主入口
void main(){
// 二级指针:就是对一级指针取地址
int num = 12;
// int*: 是指针,用于接收num地址返回值 &:获取地址
int* p = #
// 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字节 -> 十六进制显示,然后回车,可以看到下边绿色框中的值;
5>:然后把 绿色框中的值复制到上边的输入框中,然后回车,然后右键 -> 点击4字节 -> 十六进制显示 -> 带符号显示:
6>:上边的结果如下:
4. num、p、s_p三者关系如下:
分析上边代码:
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的地址