对输出感到困惑

use*_*089 1 c printf local-variables

为什么printf打印7虽然变量a是函数fun()的局部变量,但是一旦控件从函数fun()返回,它就不再存在了.

这是c代码

?#include<stdio.h>

main()
{
    int *fun();
    int *c=fun();
    printf("%d",*c);
    getch();
}

int *fun()
{
    int a=7;
    return(&a);
}
Run Code Online (Sandbox Code Playgroud)

输出:7

Did*_*set 6

这是因为即使变量不再存在,它所在的内存位置还没有被用于其他东西.因此,指针仍然指向存储位置,其中位包含int有值7.

但这绝对是未定义的行为.你不应该依赖它.