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 valuepass by reference 之间的区别。

在您的情况下,您将 x 按值传递给 myFunction,该函数基本上获取 x (2) 的值并递增它,但从不更改原始值来自主函数的 x 的值。

那是因为参数是函数中的局部变量。

调用函数时,在栈上为参数分配space,并将变量x的值复制到参数中。

在函数中参数x是局部变量,与调用代码中的变量x分开。在函数中增加 x 时,只会发生在本地副本上。

当函数结束时,当函数的堆栈帧从堆栈中移除时参数消失。