What is the output of this C code?
#include
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);
}
a) 11 11 11
b) 11 11 Undefined-value
c) Compile time error
d) Segmentation fault/code-crash
View Answer
Answer:b
int i = 10;
int *p = &i;
foo(&p);
printf("aadfa");
printf("%d ", *p); //
printf("%d ", *p); //
这两个输出都是未知数。。应为foo的内部变量已经释放完全,*p等于野指针。。
foo()是一个子函数,其内部定义的变量,在函数生存期结束后,申请的变量空间都会释放;
对于foo()内部的输出,为11,这个函数形参为二级指针,可以改变外部指针的指向,但是当函数结束时,指针所指的指针已经不存在了!
对于第二个输出,理论上应该是0或者其他,那是因为p已经为野指针了,但是刚好内存区还有一个值为11,所以刚好就把11输出来了,如果你想验证
的话,你可以在foo(%p);后面随便再输出一个东西,比如printf("hello");
此时,两个*p的值都应该一样的,默认为0。