3
我瞭解通過複製恢復調用的基本邏輯。但是我想知道的一個問題是這樣特殊情況下通過複製恢復調用混淆
void p(int x,int y) {
x++;
y+=2;
}
main() {
int a=10;
p(a,a);
// what will be now value of a, 11 or 12?
}
我瞭解通過複製恢復調用的基本邏輯。但是我想知道的一個問題是這樣特殊情況下通過複製恢復調用混淆
void p(int x,int y) {
x++;
y+=2;
}
main() {
int a=10;
p(a,a);
// what will be now value of a, 11 or 12?
}
更新:答案是12,請參見下面更新。
好的,這實際上是一個很好的問題。因此,這解釋了「複製恢復」的全部內容:https://stackoverflow.com/a/8871340/171933
大多數編程語言不支持複製/恢復,但僅支持傳遞值和傳遞引用(一些變體)。因此,嘗試一下並不容易。
但是,您感興趣的問題是:哪個值勝? x
是否在函數結束時(它將爲11)將其值寫回a
,或者當函數結束時(也就是12),y
會將其值寫回a
。
在支持「複製恢復」的語言中,我希望這會引發編譯器錯誤。
更新:
經過一番搜索,我發現居然還支持「複製 - 恢復」,即Ada的語言。這是艾達的代碼(這是我寫的第一阿達,可能最後一個節目):
with Ada.Text_IO; use Ada.Text_IO;
procedure copy_restore_example is
a: integer;
procedure p(x: in out integer; y: in out integer) is
begin
x:= x+1;
y:= y+2;
end p;
begin
a := 10;
Put_Line("Before :" & natural'image(a));
p(a, a);
Put_Line("After :" & natural'image(a));
end copy_restore_example;
結果是,y
勝。你可以在你的瀏覽器中運行這個程序:http://www.compileonline.com/compile_ada_online.php
你試過運行過嗎?這應該是C或其他什麼?在C中,'a'的值將是10(假設'= ++'打算成爲'++'),但我不確定我清楚你的問題。特別是,'x = ++'意圖是什麼? 'X ++'? – asm
這是什麼語言?它似乎代碼不編譯。 「x = ++」? –
我不是在說這裏的任何語言,我只是想通過複製恢復方法來調用。 – alienCoder