C语言中变量范围的问题,为什么函数会打印它应该打印的内容

时间:2015-04-26 07:57:45

标签: variables scope

这个程序到底发生了什么?为什么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;
}

2 个答案:

答案 0 :(得分:1)

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

调用函数时,堆栈上为参数分配了空间,变量x中的值被复制到参数中。

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

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

答案 1 :(得分:0)

您应该阅读函数变量see here)中pass by valuepass by reference之间的差异。

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