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

时间:2013-09-30 11:10:12

标签: c# java c++ c

我是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);
}

3 个答案:

答案 0 :(得分:7)

不在街区外访问。执行return c;后,会返回c值的副本,而不是c本身。

int foo()
{
   int c = 3;
   return c;
}

这只返回3, c成立。

某些语言允许编译器通过扩展c的范围来“欺骗”,但这是optimization并且不会更改逻辑。

答案 1 :(得分:0)

在c中编写函数并返回值时c的值保存在临时位置(称为堆栈),然后该临时位置被复制到c之后更长的时间。有关这个“堆栈”的更一般性讨论,谷歌在“推下弹出堆栈”

函数完成后,c的内存被销毁,但该函数返回了一个值,该值被放入answer。该值已复制到answer

的内存中 因此,这不是范围问题。该值只传递给answer

答案 2 :(得分:0)

您还应该问函数参数如何从范围变为范围?如果我在main()中声明/初始化变量,我如何在main范围之外的函数中使用该参数?

当您使用参数调用函数时,参数将被复制并发送到函数。即使它们是指针参数,它们也会被复制。当函数返回一个值时,该值被复制并发送回函数的任何调用。

这仅来自我的C和C ++知识。