値渡しとアドレス渡しの例
2023 年上半期のソフト試験の実際の質問:
22. 関数 foo と hoo の定義を下図のようにします 関数 hoo は関数 foo 内で呼び出されます hoo の第一引数は参照を渡す方法(参照渡し)と、引数を渡す方法を採用します2 番目のパラメータを値で指定すると (値で呼び出し)、関数 foo で print(a, b) が出力されます ()
A.8,5
B.39,5
C.8,40
D.39,40
参考回答:B
答えと分析 質問の難易度: 簡単
質問に記載されている呼び出しプロセスによると、hoo() の最初のパラメータ、2 番目のパラメータは値渡しの呼び出しであるため、 hoo() のmの変更は最終的に渡される呼び出しに影響します。オリジナルの foo() 関数。パラメータaは、 aによって出力される最終値です。hoo() 関数のプロセスによれば、最初に渡されたbのパラメータは元のm =5 で、この時点ではm =x *m = 8*5=40 になります (ここでのm はローカル変数であり、hoo でのみ使用されることに注意してください) ())、そしてxの最初に渡されるパラメータです。パラメータは元のa = 8です。このとき、x=m-1 = 40-1=39となり、最終的なグローバル変数aの値は39になります。(ここでの元のa はグローバル変数であり、 hoo() パラメーターのエイリアスxとして理解できることに注意してください。ここで、mはローカル変数であり、以前に取得したものです。 |
|
1 つの事例から推論を引き出す: 2020 年の質問 39 関数 foo() と hoo0 は次のように定義されており、関数 hoo() を呼び出す際、第 1 パラメータは値による呼び出し方式、第 2 パラメータは参照による呼び出し方式を採用します。関数呼び出し(関数 foo(5))を想定すると、print(x) の実行後に出力される値は ( ) となります。
答えと分析
質問に記載されている呼び出しプロセスによると、hoo() の最初のパラメータは値による呼び出し、2 番目のパラメータは参照による呼び出しであるため、hoo() での a の変更は最終的に渡される呼び出しに影響します。オリジナルの foo() 関数。パラメータ x は、x の最終出力値です。 |