我无法理解 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);
}
您正在返回局部变量的地址fun()
。任何返回值的使用都会导致未定义的行为 http://en.wikipedia.org/wiki/Undefined_behavior.
解释一下,一旦函数fun()
执行完毕,不存在k
。所以,尝试使用类似的东西&k
是无效的。
Note: Whatever the explanation is provided in that particular book [related to stack flushing or so], is not standardized in c.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)