この問題では配列変数への配列変数の代入は、要素のコピーではなく同じ配列への参照のコピーとする。一方、配列の要素から整数変数への代入は整数値のコピーである。次の処理が終了したときのa[1]、b[2]、xの組合せはどれか。要素番号は1から始まる。 整数型の配列: a ← {4, 7} 整数型の配列: b ← a 整数型: x ← a[1] b[1] ← 9 a[2] ← x + 1 x ← 0
本サイトで独自に作成。IPAの試験問題からの転載ではありません。
公開日:
選択肢を選んで、答え合わせをしましょう。
回答せずに正解・解説を確認する
正解:エ a[1] = 9、b[2] = 5、x = 0
この表示だけでは、回答数や正答率は変わりません。
解説
aとbは同じ配列を参照します。xには最初のa[1]の値4がコピーされます。b[1]を9にするとa[1]も9となり、a[2]にはx + 1 = 5を保存するのでb[2]も5です。最後にxだけを0にしても配列の保存済みの値は変わりません。
aとbを独立した配列と扱っていますが、この問題では同じ配列への参照がコピーされます。
a[2]を求める時点のxは4です。後からxを0にしてもa[2]が再計算されるわけではありません。
b[1]の変更はa[1]にも反映され、最後のxへの代入も実行されます。
共有する配列の最終値は{9, 5}、独立した整数変数xの最終値は0です。
関連知識
変数と、その変数が参照するオブジェクトを分けて図にすると、別名参照を追いやすくなります。実際の言語で配列の代入や引数の受渡しが何をコピーするかは仕様によって異なるため、設問の規則を優先します。
間違えやすいポイント
xがa[1]とずっと連動すると思わないこと。整数の値は代入時点でコピーされています。配列への参照のコピーと、整数値のコピーを同じ扱いにしません。
覚え方
配列の矢印は共有し、整数の値はその時点で写す。
実務での意味
配列を編集する関数で呼出し元のデータも変わる理由を調べるとき、参照共有と必要なコピーの範囲を確認します。
解説:本サイト編集部によるオリジナル文章