2012-04-24 91 views
1

如果参数传递机制是copy-in-copy-out,那么下面的类C程序的结果是什么? ? 在执行swap(v, list[v])期间,v将更新为3.当拷出时,将第二个参数的结果复制到list[3]list[1]copy-in-copy-out参数(值 - 结果参数传递)

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]; 
} 
+0

这是功课吗? – deceze 2012-04-24 01:45:04

+0

是的,正好... – ZHOU 2012-04-24 01:48:46

+2

由于这是作业,是否有一个原因,你没有编写一个Ada程序找出? – NWS 2012-04-24 07:33:05

回答

3

阿达的参数传递机理探讨是拷入复制出。 Ada不像C,机制是明确的,编译器会遵循它,即使这样做会很愚蠢。

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

在列出的C代码的Ada版本中发生了什么取决于您如何将它转换为Ada。我怀疑当你这样做的时候你会发现那些会在C中引起潜在的令人惊讶的行为的东西,Ada编译器不会让你这样做,或者它会迫使你以不再看起来像文件的方式奇怪的。

0

参数在执行调用之前被绑定,所以x绑定到v,y绑定到list [1]。