看不懂 让我们用C静态存储class举例

Not able to understand Let us C static storage class example

我无法理解 Yashwant Kanetkar 的 Let us C 中的示例。这是代码片段:

main()
{
    int *j;
    int *fun();
    j = fun();
    // If we add a function call here, the print statement prints a garbage value.
    printf("\n%d",*j);
}

int *fun()
{
    int k = 35;
    return (&k);
}

现在在上面的代码中,我无法理解为什么在 printf 语句之前调用函数会导致打印垃圾值。我有一个模糊的想法,因为返回值指向堆栈中的内存位置,所以在打印此值之前调用另一个函数时会出错。但我无法清楚地想象这里发生的事情。请帮助。

在您的代码中

int *fun()
{
    int k = 35;
    return (&k);
}

您正在 return 从 fun() 获取局部变量的地址。 return 值的任何使用都会导致 undefined behaviour.

说明一下,一旦函数fun()执行完毕,k就不存在了。所以,尝试使用类似 &k 的东西是无效的。

注意:无论那本书中提供了什么解释[与堆栈刷新相关],在 c.

中都没有标准化
int k = 35;

对函数 fun() 是局部的,所以一旦你从 fun() return 分配给 k 的内存不再有效,你正在 returning &k(该变量的地址)将导致未定义的行为