我是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);
}
答案 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 ++知识。