2013-04-16 125 views
0

請考慮下面的代碼示例:如何將一個函數的結果傳遞給另一個函數?

int func1(int,int); // function 1 prototype 
int func2(int); // function 2 prototype 

我想要的功能-1的輸出發送的輸入功能-2,但並不成功至今。

如果有人可以用一個例子來解釋一下,那就太好了。 另外,就Pass-by值和Pass-by-reference而言,是否可能相同?

+0

你是什麼意思的「輸出」?你的意思是'func1'返回的值? –

+0

@JoachimPileborg:亞特這是我的意思! – sheetansh

回答

3

如何簡單地

​​
+0

這意味着您無法通過引用傳遞,因爲func1的返回值位於EAX寄存器中。 –

2
int a = func2(func1(7, 9)); 

只是傳遞包含呼叫的表達func1作爲參數傳遞給func2

2

您可以通過嵌套函數做到這一點:

func2(func1(42, 24)); 

嵌套很多的功能,很容易成爲難以辨認,所以更多的可讀性,你可以FUNC1的返回值存儲在一個臨時變量:

int tmp = func1(42, 24); 
func2(tmp); 

關於您關於傳遞引用與傳遞值的問題:在所有這些函數調用中,參數都是按值傳遞的。這是因爲函數簽名定義參數int,不int *

+0

傳遞'int *'類型的參數仍然是按值傳遞的。參數是一個指針,你傳遞它的值,並且對函數中的指針(_pointer_,而不是指向的值)的指針進行更改對調用者沒有影響。 – mah

+1

如果它真的是C,那麼所有東西都是按值傳遞的。 – unkulunkulu

1

至於其他的答案說:func2(func1(1, 2));

在C語言中,你只能按值傳遞的參數。現在已經說過了,將指向指向要更改的內存的指針的值傳遞給與傳遞引用相同的效果。

int foo(int *x){ 
    printf("The address that you passed to the function is: %x", x); 
    printf("The value is: %d", *x); 
    *x = 10; 
} 
int mem; 
foo(&mem); //print the address of mem 

在C++中,您可以通過refference傳遞。

int foo(int &x){ 
    printf("The address that you passed to the function is: %x", &x); 
    printf("The value is: %d", x); 
    x = 10; 
} 
int mem; 
foo(mem); //print the address of mem 
相關問題