无法理解让我们用C静态存储类的例子

时间:2015-01-07 14:31:18

标签: c

我无法理解Yashwant Kanetkar让我们来自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语句导致打印垃圾值之前进行函数调用。我有一个模糊的想法,因为返回的值指向堆栈中的内存位置,在打印此值之前调用另一个函数时会出现问题。但我无法清楚地看到这里发生的事情。请帮忙。

2 个答案:

答案 0 :(得分:4)

代码

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

您从fun()返回本地变量的地址。使用返回值会导致undefined behaviour

要解释一下,一旦函数fun()完成执行,就不存在k。因此,尝试使用&k之类的内容无效。

注意:无论在特定书籍中提供的解释[与堆栈刷新等有关],都没有在c中标准化。

答案 1 :(得分:0)

int k = 35;

是函数fun()的本地函数所以一旦从fun()返回,为k分配的内存不再有效,并且您将返回&k(该变量的地址)这将导致未定义的行为