2012-04-24 75 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]。