打印int指针内容始终打印-2

时间:2014-07-23 06:03:39

标签: c

为什么最后一个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);
}

1 个答案:

答案 0 :(得分:2)

您的int j=2;是本地功能foo

您在函数返回前导致undefined behaviour访问它,因此可能会打印2或其他值。

如果您在示例中将int j = 2更改为static int j = 2 ,那么您始终可以预期输出为2.