[英]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.