コメント

このコメントは、【トピック】bは変えていないのに・・・へのコメントです。

コメントの内容

Cdv30200 aoi icon mini aoihikawa(投稿日:2012/01/10 08:01/10/12)
よくある誤解認識ですね。

一見、bは「aの配列の内容」を
コピーしているようかに見えますが、
実際は、bに「aという配列」をコピーしています。

そのため、aの値が変更されると、
bの内容は「aという配列」ですので
bの内容も変更されます。


正常に動作させるためには
bも新たに配列として定義した後
1つずつ、コピーする必要があります。

a = createArray() 
a[0] = "一" 
a[1] = "ニ" 
a[2] = "三" 
 
#↓ b="一","ニ","三" 
#b = a
b = createArray() 
b[0] = a[0] 
b[1] = a[1] 
b[2] = a[2] 
 
z = createArray() 
z[0] = 0 
z[1] = 2 
z[2] = 1 
 
speak("b=",b,"before") 
i  = 0 
while i < 3 
c = z[i] 
a[i] = b[c] 
i = i + 1 
end 
speak("b=",b,"after") 
speak("a=",a,"\nb=",b)

コメントの内容(一番最初の投稿)

Cdv30200 aoi icon mini aoihikawa(投稿日:2012/01/10 08:01/10/12)
よくある誤解認識ですね。

一見、bは「aの配列の内容」を
コピーしているようかに見えますが、
実際は、bに「aという配列」をコピーしています。

そのため、aの値が変更されると、
bの内容は「aという配列」ですので
bの内容も変更されます。


正常に動作させるためには
bも新たに配列として定義した後
1つずつ、コピーする必要があります。

a = createArray() 
a[0] = "一" 
a[1] = "ニ" 
a[2] = "三" 
 
#↓ b="一","ニ","三" 
#b = a
b = createArray() 
b[0] = a[0] 
b[1] = a[1] 
b[2] = a[2] 
 
z = createArray() 
z[0] = 0 
z[1] = 2 
z[2] = 1 
 
speak("b=",b,"before") 
i  = 0 
while i < 3 
c = z[i] 
a[i] = b[c] 
i = i + 1 
end 
speak("b=",b,"after") 
speak("a=",a,"\nb=",b)