这个程序到底发生了什么?为什么myFunction打印3 for x?
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;
}
答案 0 :(得分:1)
那是因为参数是函数中的局部变量。
调用函数时,堆栈上为参数分配了空间,变量x
中的值被复制到参数中。
在函数中,参数x
是局部变量,与调用代码中的变量x
分开。当函数中x
增加时,只会发生本地副本。
当函数结束时,当从堆栈中删除函数的堆栈帧时,参数消失。
答案 1 :(得分:0)
您应该阅读函数变量see here)中pass by value
与pass by reference
之间的差异。
在您的情况下,您将x
按值传递给myFunction
,该函数基本上获取x
(2)的值并递增它,但从不更改原始值来自您的主要功能的x
。