C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: 配列を初期化すると別の配列が初期化される


(過去ログ 133 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■78611 / inTopicNo.1)  配列を初期化すると別の配列が初期化される
  
□投稿者/ Wail (1回)-(2016/01/29(Fri) 04:02:04)

分類:[.NET 全般] 

こんにちは。躓いてしまったところがあり、教えていただけるとありがたいです

二次元配列 A、Bで

A = B;

をしたあと

A を繰り返しで初期化すると
なぜか B が初期化されてしまいます。

実際のソースです

if (!PanelSW)//一回だけ表示
{
//ベースマップを格納
debug = "";
UnitMoveMap = Mmap.BaseMap;  ←ここで二次元配列を入れています。
//自分のいる場所を格納(移動範囲を)
Unit_Move = MBUManager.Unit_Move[mUnit];
Debug.Log("移動距離:"+Unit_Move);
UnitMoveMap[Unit_x, Unit_y] = Unit_Move;
      PanelSW = true;
}

if (Input.GetKeyDown(MKeyCode.mKeyCode[6]))//キャンセルになったら
{
for(int i = 0; i < Mmap.MapSize; i++)
{
for(int t = 0; t < Mmap.MapSize; t++)
{
UnitMoveMap[i,t] = -999; ←ここで初期化をしています
Movesw[i, t] = false;
}
}
}

引用返信 編集キー/
■78612 / inTopicNo.2)  Re[1]: 配列を初期化すると別の配列が初期化される
□投稿者/ Azulean (585回)-(2016/01/29(Fri) 06:40:39)
No78611 (Wail さん) に返信
> 二次元配列 A、Bで
>
> A = B;
>
> をしたあと

これは、A も B も同じ配列を使うようするというコードです。
おそらく、A に B と同じ配列をコピーしたいと考えていたのかもしれませんが、残念ながらそうなっていません。


値型と参照型の違いを意識する必要がありますので、一度こちらをお読みください。
http://dobon.net/vb/dotnet/beginner/valuereference.html
引用返信 編集キー/
■78614 / inTopicNo.3)  Re[2]: 配列を初期化すると別の配列が初期化される
□投稿者/ 774RR (373回)-(2016/01/29(Fri) 07:08:43)
値型と参照型の違い・・・と書こうと思ったら既に答えが書いてあった。
配列は参照型で、参照型に対して以下のコードを書くとコメント通りの動作になる

T A = new T(); // A を使って実体1個目を使う、という意味
T B = new T(); // B を使って実体2個目を使う
A=B;
// A に入っていた実体1個目はもう使わないので gc 対象にしてよい
// B に入っていた実体2個目を A からも (もちろん B からも) 使う

ということなので言語仕様通りの動き。

配列の値を変更するのなら Array.Copy あたりで。

引用返信 編集キー/
■78617 / inTopicNo.4)  Re[3]: 配列を初期化すると別の配列が初期化される
□投稿者/ Wail (3回)-(2016/01/29(Fri) 10:09:42)
ありがとうございます!!!

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -