-1

當x和y按值傳遞時,以及在傳入名稱時,我需要找到以下代碼的結果。傳遞值和名稱傳遞的輸出

PROGRAM EX1; 
int i; //global 
int A[3]; //global 

    PROCEDURE P1(int x, int y) 
    Begin 
     y:=2; 
     PRINT(x); 
     i:=3; 
     PRINT(x); 
     i:=3; 
     PRINT(x); 
     PRINT(y); 
    End; 
BEGIN //main 
    A[1]:=7; A[2]:=13; A[3]:=11; 
    i:=1; 
    P1(A[i],i); //first call 
    P1(i,A[i]); //second call 
END. 

這是我的結論,如果X和Y是按值傳遞: 輸出:13,11,11,3 二輸出:1,3,3,11 如果是錯了,請幫忙我明白爲什麼。

我也不確定在我看到的例子中,這個代碼中pass-by-name是如何工作的。請幫助。

假設靜態範圍。

+0

您是否嘗試過谷歌有關參數傳遞方法的含義?另外,你不能以某種方式將參數傳遞給函數/過程,有時候也不能以另一種方式傳遞參數。函數/過程聲明確定了要使用的方法。最後,如果按值傳遞,那麼在過程/函數完成後,對過程/函數內的值的任何更改都將丟失。 – FDavidov

+0

這只是理論上的,如果代碼在使用不同的參數傳遞運行時會輸出什麼。是的,我已經搜索了一些關於不同傳球方法的教科書,但我需要更多的指導來幫助我理解。 – KNuz

回答

0

在描述過程中,我將忽略您的代碼很可能無法編譯/運行的事實,並且只會解決您的具體問題。

無論用於傳遞參數的機制(按值還是按名稱),對變量i的分配都沒有意義:當按值傳遞時,根本沒有意義(在函數P1內)源參數可以是數組;當通過名稱並且通過A[i]其中i=1時,到達函數P1正文的是A[1],因此更改爲i根本沒有任何效果。

因此,在這兩種情況下(按值和名稱),您將得到相同的結果,意思是:第一次調用時爲7,7,7,2,第二次爲1,1,1,2。