請考慮下面的代碼示例:如何將一個函數的結果傳遞給另一個函數?
int func1(int,int); // function 1 prototype
int func2(int); // function 2 prototype
我想要的功能-1的輸出發送的輸入功能-2,但並不成功至今。
如果有人可以用一個例子來解釋一下,那就太好了。 另外,就Pass-by值和Pass-by-reference而言,是否可能相同?
請考慮下面的代碼示例:如何將一個函數的結果傳遞給另一個函數?
int func1(int,int); // function 1 prototype
int func2(int); // function 2 prototype
我想要的功能-1的輸出發送的輸入功能-2,但並不成功至今。
如果有人可以用一個例子來解釋一下,那就太好了。 另外,就Pass-by值和Pass-by-reference而言,是否可能相同?
如何簡單地
這意味着您無法通過引用傳遞,因爲func1的返回值位於EAX寄存器中。 –
int a = func2(func1(7, 9));
只是傳遞包含呼叫的表達func1
作爲參數傳遞給func2
。
您可以通過嵌套函數做到這一點:
func2(func1(42, 24));
嵌套很多的功能,很容易成爲難以辨認,所以更多的可讀性,你可以FUNC1的返回值存儲在一個臨時變量:
int tmp = func1(42, 24);
func2(tmp);
關於您關於傳遞引用與傳遞值的問題:在所有這些函數調用中,參數都是按值傳遞的。這是因爲函數簽名定義參數int
,不int *
傳遞'int *'類型的參數仍然是按值傳遞的。參數是一個指針,你傳遞它的值,並且對函數中的指針(_pointer_,而不是指向的值)的指針進行更改對調用者沒有影響。 – mah
如果它真的是C,那麼所有東西都是按值傳遞的。 – unkulunkulu
至於其他的答案說: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
你是什麼意思的「輸出」?你的意思是'func1'返回的值? –
@JoachimPileborg:亞特這是我的意思! – sheetansh