2014-07-13 131 views
0

我在做這個問題,我有疑問。這是什麼輸出?

#include <stdio.h> 
int main(void) 
{ 
    int fun (int); 
    int i=3; 
    fun(i=fun(fun(i))); 
    printf("%d\n",i); 
    return 0; 
} 

int fun (int i) 
{ 
    i++; 
    return(i); 
} 

我有一個疑問,當它到達

fun (i = 5) 

這個會發生什麼?將我的價值去6或將是5. 據我所知,它應該是6.但這不是正確的答案。

+10

如何運行它? – MightyPork

+0

你不分配樂趣的結果(i)當我== 5任何東西,所以我沒有更新。 –

+0

@MightyPork,這是一門考試中提出的理論問題。我可以輕鬆地運行它,但我想知道它背後的概念。 :) – user3797829

回答

1

fun()的調用結果未分配給i。因此預計5,而不是6

6

在C中,參數按值傳遞。主函數中的變量i實際上與fun()中的i不同,因爲它的值在傳遞給函數時被複制。

當您撥打i = fun(fun(i))時,5被分配到主功能中的i。但是,返回6的fun(5)的呼叫不會將其結果重新分配給i,而使其保持不變。當輸出打印時,i仍然是5.

1

這與範圍有關。在函數作用域中,除非它是一個指針,否則在該作用域中定義的變量或傳入的參數對外部作用域變量沒有任何影響。因此,fun的輸出將被分配到i,fun(i = 5)中,但fun的內部操作不影響外部範圍i。所以它保持在fun上次呼叫之前。輸出是5