c - 对输出感到困惑

标签 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);
}

输出:7

最佳答案

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

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

关于c - 对输出感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11151875/

相关文章:

c++ - malloc 的奇怪问题

c -++*var++ 和++Var++ 有什么区别?

c - 当我从目录打印文件时,为什么会出现点 ("."和 "..")?

c++ - sprintf 生成的字符串的值顺序与 Ubuntu 服务器上传递的参数顺序不同

mysql - 在 SQL 语句中使用局部变量时出现问题

c - 如果堆栈是 'flipped',你还能使用缓冲区溢出来执行 shell 代码吗?

c - 动态分配链表数组

C: 简单复制输入 (getchar) 到输出 (printf) 返回额外的行

c++ - 如何使用指针从不同的函数访问局部变量?

ruby - 未执行的代码覆盖局部变量