【问题标题】:Pointers to pointer usage giving unexpected result [duplicate]指向指针使用的指针会产生意想不到的结果[重复]
【发布时间】:2015-06-15 20:18:38
【问题描述】:

为什么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;
}

【问题讨论】:

    标签: c pointers


    【解决方案1】:

    foo() 内部,您将自动局部变量 j 的地址分配给 *p。在foo() 完成执行后,j 不再存在,因此,在main() 中进一步使用(解除)p 调用undefined behavior

    现在,UB 的输出是,undefined

    【讨论】:

    • 我同意你的回答,但问题是,为什么 main() 中的第一个 Printf() 打印的是正确的值,即 11?
    • @ArvindRajput 它似乎 打印 正确 值,但不能保证它 始终打印。这就是UB的。 :-)
    • @ArvindRajput:对于第一次调用printf,该值可能完好无损地留在堆栈中,但随后实际的printf 调用会覆盖它。不过,你不能指望这种行为。
    猜你喜欢
    • 2018-11-03
    • 2010-10-27
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多