为什么第一次打印声明在main()
,打印11?
#include<stdio.h>
void foo(int ** p){
int j = 11;
*p = &j;
printf("%d ", **p); //Printing 11
}
int main(){
int i = 10;
int *p = &i;
foo(&p);
printf("%d ", *p); //Printing 11
printf("%d ", *p); //Printing Random value
return 0;
}
答案 0 :(得分:6)
在foo()
内,您要将自动本地变量j
的地址分配给*p
。 foo()
执行完毕后,j
不再存在,因此,p
中使用(取消重新定位)main()
会调用undefined behavior。
现在,UB的输出是 undefined 。