gpt4 book ai didi

parameter-passing - copy-in-copy-out 参数(值-结果参数传递)

转载 作者:行者123 更新时间:2023-12-04 18:22:56 24 4
gpt4 key购买 nike

如果参数传递机制是copy-in-copy-out,如Ada中的in out,那么下面的类C程序会产生什么结果?swap(v, list[v]) 执行期间, v会更新为3。复制出来的时候,会不会把第二个参数的结果复制到list[3] , 或 list[1] ?

swap(int x, int y){
int t = x;
x = y;
y = t;
}

main(){
v = 1;
int list[5] = {1,3,5,7,9};
swap(v, list[v]);
print v, list[0...4];
}

最佳答案

Ada的参数传递机制不是copy-in-copy out . Ada 不像 C,其机制是明确的,编译器会遵循它,即使这样做很愚蠢。

在某些特定情况下,语言指定事物是通过引用传递的。否则,这实际上取决于编译器,并且不允许您依赖正在使用的一种机制而不是另一种机制。在实践中,编译器会做明智的事情 ,如果对象适合机器寄存器,通常归结为复制,否则引用。

您列出的 C 代码的 Ada 版本中发生的情况取决于您将其转换为 Ada 的方式。我怀疑当你这样做时你会发现在 C 中可能会导致令人惊讶的行为的事情,Ada 编译器要么不会让你这样做,要么它会迫使你以不再看起来的方式记录奇怪。

关于parameter-passing - copy-in-copy-out 参数(值-结果参数传递),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10290654/

24 4 0