GameMaker 日本語掲示板

配列を引数として関数に渡すことについて / 2

4 コメント
views
16 フォロー
2
asa 2021/12/23 (木) 20:03:36 修正

array2 = array1
やってみました。
関数に渡したときと同じことが起きてるように見えます。
つまり、array2 = array1でarray2はarray1の参照になり、array2を変更しようとした時点でコピーされ別の配列になる。

array1 = ["dog", "cat", "fox"];
array2 = array1;

show_debug_message("(1) array1 = "+string(array1));
show_debug_message("(1) array2 = "+string(array2));

array2[1] = "123"; // ★1

show_debug_message("(2) array1 = "+string(array1));
show_debug_message("(2) array2 = "+string(array2));

結果
(1) array1 = [ "dog","cat","flower" ]
(1) array2 = [ "dog","cat","flower" ]
(2) array1 = [ "dog","cat","flower" ]
(2) array2 = [ "dog","123","flower" ]
array2だけが変更されている。ということはコピーされていてarray1とarray2は別の配列になっていると見ることができる。

★1の部分を array2[@ 1] = "123"; にすると、 
結果
(1) array1 = [ "dog","cat","flower" ]
(1) array2 = [ "dog","cat","flower" ]
(2) array1 = [ "dog","123","flower" ]
(2) array2 = [ "dog","123","flower" ]
array1とarray2が両方変わっている
array2はarray1の参照のままであり、array2[@ 1]でarray1[1]を直接変更したと考えられる。

★1の部分を array1[1] = "123"; にすると、
結果
(1) array1 = [ "dog","cat","flower" ]
(1) array2 = [ "dog","cat","flower" ]
(2) array1 = [ "dog","123","flower" ]
(2) array2 = [ "dog","123","flower" ]
array1とarray2が両方変更されている
array2はarray1の参照であるからarray1の内容を示していると考えられる。

通報 ...