当使用"return"时,如何在块外访问任何变量?

yog*_*ogi 2 c c# c++ java

我是C的初学者,已经开始在c中编写代码.我对变量的范围有疑问.当任何变量写入块内时,其范围在该块内.但是,当使用返回字时,如何在块外部访问变量?

例:

int add(int a, int b) 
{
    int c;//scope of c is within this block
    c=a+b;
    return c;
} //it ends here

void main()
{
    int answer;
    answer=add(2,3);//how we gets  value  of "c " here
    printf("%d",answer);
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*rtz 6

它不在街区外进入.当你这样做时return c;,c会返回一个值的副本,而不是c它自己.

int foo()
{
   int c = 3;
   return c;
}
Run Code Online (Sandbox Code Playgroud)

这只返回3, c保持不变.

有些语言允许编译器通过扩展c范围来"欺骗" ,但这是一种优化,不会改变逻辑.