-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 それが間違っている場合は助けてください私はなぜそれを理解する。

私が見た例から、このコードではパス名がどのように機能するかもわかりません。それも助けてください。

スタティックスコープを仮定します。

+0

これは、パラメータ渡しメソッドの意味については、Googleにしようとしましたか?また、関数/プロシージャにパラメータを渡すこともできません。関数/プロシージャ宣言は、どのメソッドが使用されるかを確立しました。最後に、値渡しの場合、プロシージャ/ファンクション内の値の変更は、プロシージャ/ファンクションが完了すると失われます。 – FDavidov

+0

これはちょうど理論的なものです。異なるパラメータ渡しを使用して実行された場合、コード出力はどのようになりますか?そして、はい、私はグーグルで、さまざまな渡し方についての教科書を持っていますが、私が理解するのを助けるためにもう少し教えが必要です。 – KNuz

答えて

0

あなたのコードがコンパイル/実行に失敗する可能性が高いという事実を説明中に無視し、特定の質問にのみ対処します。

パラメータを(値または名前で)渡すために使用されるメカニズムにかかわらず、変数iへの代入は意味がありません。値渡しの場合、(関数P1内の)意味はありませんソースパラメータは配列であってもよい。 の場合、P1の本体に到達する内容はA[1]であるため、iに変更しても効果はまったくありません。

したがって、両方の場合(値と名前で)同じ結果が得られます。つまり、最初の呼び出しでは7,7,7,2、2番目の呼び出しでは1,1,1,2です。

関連する問題