c語言指向指標的指標
阿新 • • 發佈:2021-02-12
c語言指向指標的指標
歡迎關注AWP資訊
今天看一下指標的一些複雜用法,在一些常見的面試題或筆試題目中會經常出現,全面瞭解指向指標的指標,還是從一個記憶體分佈圖開始看起
int a = 3;
int *p;
p = &a;
定義的int a = 3;假設在記憶體中的起始地址為0x115,在這個空間中存的變數的值為3,定義的指標變數p,p = &a;p中所儲存的是變數a的地址。接下來我們看一下二重指標,指向指標的指標,程式碼如下
int a = 3;
int *p;
int **p0;
p = &a;
p0 = &p;
定義的二重指標p0,p0指向指標p的地址,將p0拆開來分析, 首先是 *p0這個裡面存的是指標p的地址,**p0裡面是指向指標p指向的地址的值,p指向的地址是a的地址,變數a裡面的值是3,所以最終 * *p0裡面的值是變數a的值3,分析了二重指標,再來點挑戰看一下三重指標,定義如下變數
int a = 3;
int *p;
int **p0;
int ***p1;
p = &a;
p0 = &p;
p1 = &p0;
還是像上面分析的一樣,定義的三重指標p1,p1指向二重指標的p0的地址,首先是*p1這個裡面是指標p0的地址,**p1裡面是指向指標p0指向的地址的值,p0指向指標p的地址,p指向變數a的地址,最終的值也就是變數a的地址,三重指標 * * *p1的值也就是變數a的值。
#include <stdio.h>
int main()
{
int a = 3;
int *p;
int **p0;
int ***p1;
p = &a;
printf("p = %d, *p = %d\n",p,*p);//p = 變數a的地址,*p = 變數a的值3
p0 = &p;
printf("p0 = %d,*p0 = %d,**p0 = %d\n",p0,*p0,**p0);//p0 = 指標p的地址,*p0 = 指標p存放的值,也就是變數a的地址,**p0 = 變數a的值
p1 = &p0;
printf("p1 = %d, *p1 = %d, **p1 = %d, ***p1 = %d\n",p1,*p1,**p1,***p1);//p1 = 指標p0的地址,*p1 = 指標p0裡面存放的值,也就是p的地址,**p1 = 變數a的地址值,***p1 = 變數a的值
return 0;
}
我們看一下打印出來的結果是不是和我們預期的一樣