C 中变量范围的问题,为什么函数打印它应该打印的内容
Issue with scope of variables in C, why a function prints what it's supposed to print
这个程序到底是怎么回事?为什么 myFunction 为 x 打印 3?
int myFunction(int);
void main(void) /* local variables: x, result in main */
{
int result, x = 2;
result = myFunction(x);
printf("%i", result); /* prints "3" */
printf("%i", x); /* prints "2" */
}
int myFunction (int x)
{
x = x + 1;
printf("%i\n", x); /* prints "3" */
return x;
}
您应该阅读函数变量 (see here) 中 pass by value
与 pass by reference
之间的区别。
在您的情况下,您将 x
按值传递给 myFunction
,该函数基本上获取 x
(2) 的值并递增它,但从不更改原始值来自主函数的 x
的值。
那是因为参数是函数中的局部变量。
调用函数时,在栈上为参数分配space,并将变量x
的值复制到参数中。
在函数中参数x
是局部变量,与调用代码中的变量x
分开。在函数中增加 x
时,只会发生在本地副本上。
当函数结束时,当函数的堆栈帧从堆栈中移除时参数消失。
这个程序到底是怎么回事?为什么 myFunction 为 x 打印 3?
int myFunction(int);
void main(void) /* local variables: x, result in main */
{
int result, x = 2;
result = myFunction(x);
printf("%i", result); /* prints "3" */
printf("%i", x); /* prints "2" */
}
int myFunction (int x)
{
x = x + 1;
printf("%i\n", x); /* prints "3" */
return x;
}
您应该阅读函数变量 (see here) 中 pass by value
与 pass by reference
之间的区别。
在您的情况下,您将 x
按值传递给 myFunction
,该函数基本上获取 x
(2) 的值并递增它,但从不更改原始值来自主函数的 x
的值。
那是因为参数是函数中的局部变量。
调用函数时,在栈上为参数分配space,并将变量x
的值复制到参数中。
在函数中参数x
是局部变量,与调用代码中的变量x
分开。在函数中增加 x
时,只会发生在本地副本上。
当函数结束时,当函数的堆栈帧从堆栈中移除时参数消失。