为什么y没有被解除引用?

1 c

对于下面的代码,这就是我的理解:对指针x的引用传递给函数f,val获取y的地址,这是一个局部变量.那么为什么在退出函数f之后,x还可以呢?你应该被解除引用.x等于5,两个printf都打印相同的地址.

void f (int ** val)
{
    int y = 5 ;
    *val = & y;
    printf("%d\n", &y);

}

int _tmain(int argc, _TCHAR* argv[])
{

    int * x ;
    f(&x );
    if ( *x == 5 )
        printf("%d", x);
}
Run Code Online (Sandbox Code Playgroud)

pmg*_*pmg 7

访问您的程序不拥有的内存是未定义的行为.

y函数内部占用的内存空间在函数完成后不属于您的程序,但您可以访问它.

什么事情都可能发生.

最糟糕的事情是程序按照您的预期运行.
当发生这种情况时,你相信做你做的事情是可以的.不行.未定义的行为很糟糕.

此外,不保证在程序的不同运行中也会发生相同的未定义行为.当你向客户端(或你的老板)演示它时,它可以像你期望的那样工作并崩溃.

(UB的一些好的表现是崩溃,或柠檬汁开始渗出USB端口)

任何事情都可能发生.