gpt4 book ai didi

function-calls - 特殊情况下copy-restore在call中的困惑

转载 作者:行者123 更新时间:2023-12-01 12:45:16 25 4
gpt4 key购买 nike

我了解调用复制还原的基本逻辑。但是我想知道这样的问题

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,还是 y 将其值写回函数结束时返回 a(即 12)。

在支持“复制-恢复”的语言中,我希望这会引发编译器错误。

更新:

经过一番搜索,我发现了一种真正支持“复制-恢复”的语言,即 Ada。这是 Ada 中的代码(这是我第一个也是最后一个用 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;

结果是12y获胜。您可以在此处的浏览器中运行此程序:http://www.compileonline.com/compile_ada_online.php

关于function-calls - 特殊情况下copy-restore在call中的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20706701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com