前言
變量:就是給內(nèi)存地址取一個別名;
1. 二級指針
二級指針:就是對一級指針再取地址;
2. 代碼如下:
#include<stdio.h> // 第一步:導(dǎo)入頭文件
// 程序主入口
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>:運行的結(jié)果是:p 的值是:0042FBD0 , s_p 的值是:0042FBC4,只看s_p的值,不看p的值;
3>:點擊上邊的調(diào)試 -> 窗口 -> 內(nèi)存1,把s_p的值粘貼到里邊,然后回車;
4>:然后在下邊區(qū)域,右鍵 -> 點擊4字節(jié) -> 十六進(jìn)制顯示,然后回車,可以看到下邊綠色框中的值;

圖片.png
5>:然后把 綠色框中的值復(fù)制到上邊的輸入框中,然后回車,然后右鍵 -> 點擊4字節(jié) -> 十六進(jìn)制顯示 -> 帶符號顯示:

圖片.png
6>:上邊的結(jié)果如下:

圖片.png
4. num、p、s_p三者關(guān)系如下:

圖片.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的地址