为什么最后一个printf输出-2
?
是不是应该输出2
?
对此有解释吗?
#include <stdio.h>
void foo(int **);
int main()
{
int x=20;
int *p;
p=&x;
printf("%d\n",&x);
printf("%d\n",p);
printf("%d\n",&p);
foo(&p);
printf("%d\n",p);
printf("main%d\n",*p);
}
void foo(int **p)
{
int j=2;
printf("%d\n",p);
printf("%d\n",*p);
*p=&j;
printf("%d\n",*p);
printf("%d\n",**p);
}
答案 0 :(得分:2)
您的int j=2;
是本地功能foo
。
您在函数返回前导致undefined behaviour访问它,因此可能会打印2
或其他值。
如果您在示例中将int j = 2
更改为static int j = 2
,那么您始终可以预期输出为2.