簡體   English   中英

為什么指向 printf output 的指針指向 printf 而不用指針進行任何更改

[英]why does a pointer to pointer points on a printf output without making any changes with the pointer

我發現了這個問題,我應該告訴 output 是什么。

  #include <stdio.h>
    int main()
    {
        int i = 10;
        int *p = &i;
        foo(&p);
        printf("%d ", *p);
        printf("%d ", *p);
    }
    void foo(int **const p)
    {
        int j = 11;
        *p = &j;
        printf("%d ", **p);
    }

我認為應該是 11 11 11。答案是 11 11 unfined。 我用調試器檢查,發現 printf 返回 3,第二次打印后 p 指向該值 3。我不知道為什么會這樣。 如果有人可以解釋那就太好了。 謝謝。

發生這種情況是因為您將p分配給局部變量的地址,因此第二個和第三個printf的行為實際上都是未定義的。

一旦 function 到達末尾,它的所有局部變量都會從 scope 中退出。 他們使用的 memory 不再保留,因此p指向的地址可能仍包含值11 ,但它也可能已被覆蓋,就像您的計算機上的情況一樣(在我的計算機上,我每次都得到 11,但它是只是偶然)。

為了確保該值不會丟失,您可以將j聲明為 static 或全局變量,或者使用*alloc function 對其進行分配。

暫無
暫無

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

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