指针使用指针给出意想不到的结果

时间:2015-06-15 20:18:39

标签: c pointers

为什么第一次打印声明在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;
}

1 个答案:

答案 0 :(得分:6)

foo()内,您要将自动本地变量j的地址分配给*pfoo()执行完毕后,j不再存在,因此,p中使用(取消重新定位)main()会调用undefined behavior

现在,UB的输出是 undefined