2 ralphfjy RALPHFJY 于 2017.01.07 08:50 提问

能解释解释这里有关p的变化吗
  1. 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

2个回答

shen_wei
shen_wei   Ds   Rxr 2017.01.12 16:39
已采纳
    int i = 10;
    int *p = &i;
    foo(&p);
    printf("aadfa");
    printf("%d ", *p);  //
    printf("%d ", *p); // 

    这两个输出都是未知数。。应为foo的内部变量已经释放完全,*p等于野指针。。
Fate_Dream
Fate_Dream   2017.01.07 11:07

foo()是一个子函数,其内部定义的变量,在函数生存期结束后,申请的变量空间都会释放;
对于foo()内部的输出,为11,这个函数形参为二级指针,可以改变外部指针的指向,但是当函数结束时,指针所指的指针已经不存在了!
对于第二个输出,理论上应该是0或者其他,那是因为p已经为野指针了,但是刚好内存区还有一个值为11,所以刚好就把11输出来了,如果你想验证
的话,你可以在foo(%p);后面随便再输出一个东西,比如printf("hello");
此时,两个*p的值都应该一样的,默认为0。

RALPHFJY
RALPHFJY 我试后printf(“hello" )后,还是11,11,undifined_value
11 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!