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

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

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

Re[3]: 構造体配列と配列を構造体メンバーした関係について


(過去ログ 116 を表示中)

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

■68479 / inTopicNo.1)  構造体配列と配列を構造体メンバーした関係について
  
□投稿者/ 中学3年A (11回)-(2013/10/22(Tue) 17:15:21)

分類:[.NET 全般] 

開発環境:Visual Studio Expres 2008, Vista
使用言語:VB.NET, C#

質問事項最後に記載しています。

1.構造体の作成
struct test
{
string[] moji;
}
2.構造体配列の作成
test[] sample = new test[3];
3.構造体の初期化
string[] init = new string[3];
for (int i = 0; i < 3; i++)
{
init[i] = "";
}
初期化
for (int j = 0; j < 3; j++)
{
sample[j].moji = init;
}
4.構造体配列の使用と結果
sample[0].moji[0] = "A";
sample[1].moji[0] = "B";
sample[2].moji[0] = "C";
:表示結果
Debug.WriteLine(sample[0].moji[0]);//C
Debug.WriteLine(sample[1].moji[0]);//C
Debug.WriteLine(sample[2].moji[0]);//C

ここでの質問は、入力値"A","B","C"が最後に入力した
"C"に支配され全て"C"に置き換わる理由と、私が意図した
通りに、以下の様に表示にされる方法をご教授ください。
宜しくお願いします。
:表示結果
Debug.WriteLine(sample[0].moji[0]);//A
Debug.WriteLine(sample[1].moji[0]);//B
Debug.WriteLine(sample[2].moji[0]);//C
引用返信 編集キー/
■68481 / inTopicNo.2)  Re[1]: 構造体配列と配列を構造体メンバーした関係について
□投稿者/ King (5回)-(2013/10/22(Tue) 17:40:47)
initはstringの配列なので参照型となります。

for (int j = 0; j < 3; j++)
{
sample[j].moji = init;
}

により
sample[0].moji
sample[1].moji
sample[2].moji
は全て、initへの参照を格納します。

すなわち
sample[2].moji[0] = "C";

init.moji[0] = "C";
と同義です。

sample[0].moji[0]
sample[1].moji[0]
sample[2].moji[0]
は全て
init.moji[0]
と同義なので全て "C" となります。
引用返信 編集キー/
■68482 / inTopicNo.3)  Re[2]: 構造体配列と配列を構造体メンバーした関係について
□投稿者/ King (6回)-(2013/10/22(Tue) 17:45:23)
これで意図通りにならないでしょうか。

// 構造体配列の作成
test[] sample = new test[3];

// 初期化
for (int j = 0; j < 3; j++)
{
    sample[j].moji = new string[3];
}

// 構造体配列の使用と結果
sample[0].moji[0] = "A";
sample[1].moji[0] = "B";
sample[2].moji[0] = "C";

引用返信 編集キー/
■68490 / inTopicNo.4)  Re[3]: 構造体配列と配列を構造体メンバーした関係について
□投稿者/ 中学3年A (12回)-(2013/10/23(Wed) 10:58:39)
No68482 (King さん) に返信
> これで意図通りにならないでしょうか。
>
> // 構造体配列の作成
> test[] sample = new test[3];
>
> // 初期化
> for (int j = 0; j < 3; j++)
> {
> sample[j].moji = new string[3];
> }
>
> // 構造体配列の使用と結果
> sample[0].moji[0] = "A";
> sample[1].moji[0] = "B";
> sample[2].moji[0] = "C";

> おかげ間違いを理解し、目的を達成できました。
有難うございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -