【发布时间】:2011-12-10 03:43:16
【问题描述】:
我最近阅读了 C 中的作用域规则。它说局部变量或自动变量仅在声明它的函数块内可用。一旦在函数之外,它就不再可见。此外,它的生命周期只到函数体的最后一个右大括号结束。
现在问题来了。当局部变量的地址从函数返回给调用函数时会发生什么?
例如:-
main()
{
int *p=fun();
}
int * fun()
{
int localvar=0;
return (&localvar);
}
一旦控制从函数 fun 返回,变量 localvar 就不再存在。那么 main 怎么才能访问到这个地址的内容呢?
【问题讨论】:
-
对所有函数使用显式返回类型,包括
main。因此:int main(void). -
挠头。务实地说,您不会返回地址。您将返回 localvar 中的值,在这种情况下,该函数声明是错误的(因为它需要返回
int而不是int *)。 -
查看我标记为重复的问题。措辞略有不同,但代码相同,并且 Eric Lippert 给出了出色的答案。
-
@user980153 您无需将相同的评论复制并粘贴到每个人的答案中。
标签: c