2

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

3 回答 3

6

它不能在块外访问。当您这样做时,将返回 ' 值return c;的副本,而不是其本身。cc

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

这只是返回 3,该 c成立。

某些语言允许编译器通过扩展 's 范围来“作弊” c,但这是一种优化,不会改变逻辑。

于 2013-09-30T11:11:08.650 回答
0

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

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

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

于 2013-09-30T11:17:49.833 回答
0

当您在 c 中编写一个函数并返回一个值时,for 的值c被保存在一个临时位置(称为堆栈)中,然后该临时位置被复制到一个c不再可用的位置。有关此“堆栈”的更一般性讨论,请参阅 Google 上的“Push Down Pop Up Stacks”

函数完成后,内存c被销毁,但函数返回一个值,并且该值被放入answer. 该值被复制到内存中answer

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

于 2013-09-30T11:14:19.457 回答