1. 程式人生 > 其它 >c語言指向指標的指標

c語言指向指標的指標

技術標籤:C語言基礎知識筆記指標c語言

c語言指向指標的指標

歡迎關注AWP資訊
今天看一下指標的一些複雜用法,在一些常見的面試題或筆試題目中會經常出現,全面瞭解指向指標的指標,還是從一個記憶體分佈圖開始看起

int a = 3;
int *p;
p = &a;

image-20210114095919172

定義的int a = 3;假設在記憶體中的起始地址為0x115,在這個空間中存的變數的值為3,定義的指標變數p,p = &a;p中所儲存的是變數a的地址。接下來我們看一下二重指標,指向指標的指標,程式碼如下

int a = 3;
int *p;
int **p0;
p = &a;
p0 = &p;

image-20210114100037919

定義的二重指標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;

image-20210114102609392

還是像上面分析的一樣,定義的三重指標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; }

我們看一下打印出來的結果是不是和我們預期的一樣

image-20210114113957789