簡體   English   中英

了解C語言中的指針到指針邏輯

[英]Understanding Pointer to Pointer Logic in C

我遇到了這段代碼,對這里發生的事情有些困惑:

int **p;
p = malloc(sizeof(int *));
*p = malloc(sizeof(int));

**p = 10;


printf("%d\n",**p);

首先,p是一個指向指針的指針,但是它沒有指向其他任何指針,那么為什么我們在這里必須malloc兩次? 同樣在第一個malloc調用中,為什么不需要在p:周圍有兩個指針值,例如:

**p = malloc(sizeof(int *));

代替 :

p = malloc(sizeof(int *));

我知道下一行引用是指針,並在其中存儲值10,然后打印出來。 但是,我並沒有真正了解前面的內容,或者至少為什么不這樣做。

我習慣於在這種心態中看到雙重指針:

int main(void) {
    int *ptr;
    int **ptr_ptr;

    ptr = malloc(sizeof(int));

    *ptr = 5;
    ptr_ptr = &ptr;

    printf("%d\n",**ptr_ptr); /*prints 5*/

    free(ptr);
    return 0;
}

由於雙指針實際上指向此處的某物。 對於第一部分代碼的任何幫助將不勝感激。

在兩個malloc之后,變量p包含一個指向malloc分配的指針的指針,而該指針又包含一個指向malloc分配的整數的指針:

   +---+    +---+    +----+
p: |  ----> |  ----> | 10 |
   +---+    +---+    +----+

由於int **p是指向指針的指針,因此它將保存int*類型的指針的位置或地址。 但是必須首先為int*分配足夠的內存,該內存將存儲在p指向的位置。 這行完成了這項工作,它初始化了p

p = malloc(sizeof(int *));

現在, int*的位置是已知的,我們必須分配內存來存儲acutal int在被指向的內存*p這是我們int*指針。 因此,需要另一個malloc()調用來初始化int*類型的指針。

*p = malloc(sizeof(int));

完成所有操作后,可以將一個整數分配給**p ,這是*p指向的int

**p = 10;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM