2

Pass By Nameについて疑問があります

   Procedure test ( int c, int d) 
    { 
      int k = 10;

      c = 5;

      d = d + 2 ;

      k = c + d;

      print (k);
}

main()
{
    k = 1;

    test(k,k);

    print (k);
}

名前渡しとは何か、それはどのように機能するかについての以前の質問の1つを参照しました

およびその中にあるリンク:

名前パラメータ渡しによる受け渡し

私が持っている質問は次のとおりです:上記のコードは印刷されますか: ( 14 , 1 ) または (14, 14)

基本的に疑問は、手順の k の値がメイン手順に反映されるかどうかです。

私は試験の準備をしています。これは、問題バンクの 1 つで指定されたコード スニペットです。

4

1 に答える 1

1

より複雑な式ではなく変数を渡す場合、名前渡しは、参照渡しと同じように動作します。したがって、コードは 14 と 7 を出力します。

kプロシージャ内のローカル変数testは、グローバル変数と同じ変数ではないことに注意してくださいk。では、 と の両方を介してに名前で渡されたためtest、割り当てc = 5d = d + 2両方が グローバル に割り当てられます。したがって、これらの割り当ての後、グローバルの値は になります。割り当ては、グローバル変数(ローカル変数によってシャドウされている) ではなく、ローカル変数(その時点でスコープ内であるため) に影響するため、グローバルは割り当て後に値を保持します。ktestcdk7k = c + d;kkkk7

于 2014-02-13T10:35:32.683 に答える