2015-04-26 25 views
0

這個程序究竟發生了什麼?爲什麼myFunction爲x打印3?C中變量的範圍問題,爲什麼函數會打印它應該打印的內容

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; 
} 

回答

1

這是因爲參數是函數中的局部變量。

當函數被調用時,在堆棧上爲參數分配空間,並將變量x中的值複製到參數中。

在函數中,參數x是一個本地變量,與調用代碼中的變量x分開。當功能增加x時,只發生在本地副本上。

當函數結束時,當函數的堆棧框架從堆棧中移除時,該參數將消失。

0

你應該閱讀有關pass by valuepass by reference之間的函數變量(see here)的差異。

在你的情況,你是按值傳遞給xmyFunction,功能基本上得到的x(2)和增量它的價值,但永遠不會改變的x從你的主函數原始值。