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

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

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

Re[3]: 1次元配列の引数に2次元配列の1次元目を渡したい


(過去ログ 127 を表示中)

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

■75399 / inTopicNo.1)  1次元配列の引数に2次元配列の1次元目を渡したい
  
□投稿者/ ポラ (1回)-(2015/03/21(Sat) 14:01:50)

分類:[C#] 

基本的なことで大変申し訳ありません・・・
C言語ではできたのですが、これをC#で実現するにはどうしたらいいのでしょう・・・

C言語のソース
----------------------------------------------------
void main()
{
  int a[5][10];
  a[4][9] = 123;
  func(a[4]);
  printf("%d\n", a[4][9]);
}

void func(int b[])
{
  b[9]+=1;
}

出力
----------------------------------------------------
124


同様のことを目指したC#のソース
----------------------------------------------------
static void Main()
{
  int[,] a = new int[5, 10];
  a[4, 9] = 123;
  func(a[4]);  // コンパイルエラー
  Console.WriteLine(a[4, 9]);
}

static void func(int[] b)
{
  b[9] += 1;
}

エラーコメントは以下のように出力されました。
角かっこ [] 内のインデックス数が正しくありません。正しい数は '2' です
引数 '1': 'int' から 'int[]' に変換できません。
引用返信 編集キー/
■75400 / inTopicNo.2)  Re[1]: 1次元配列の引数に2次元配列の1次元目を渡したい
□投稿者/ Hongliang (296回)-(2015/03/21(Sat) 14:13:20)
基本的に出来ないと考えてください。
代わりに、ジャグ配列を使用するのをお勧めしておきます。

int[][] a = new int[5][];
for (int i = 0; i < a.Length; ++i) a[i] = new int[10];
a[4][9] = 123;
func(a[4]);
Console.WriteLine(a[4][9]);
引用返信 編集キー/
■75401 / inTopicNo.3)  Re[1]: 1次元配列の引数に2次元配列の1次元目を渡したい
□投稿者/ WebSurfer (532回)-(2015/03/21(Sat) 14:24:47)
No75399 (ポラ さん) に返信
> 同様のことを目指したC#のソース
> ----------------------------------------------------
> static void Main()
> {
>   int[,] a = new int[5, 10];
>   a[4, 9] = 123;
>   func(a[4]);  // コンパイルエラー
>   Console.WriteLine(a[4, 9]);
> }
>
> static void func(int[] b)
> {
>   b[9] += 1;
> }

多次元配列(int[,] a)を使う場合は、以下の部分を ⇒ の右側のように修正すれ
ば OK なはずです。

func(a[4]); ⇒ func(a);

static void func(int[] b) ⇒ static void func(int[,] b)

b[9] += 1; ⇒ b[4,9] += 1;

引用返信 編集キー/
■75402 / inTopicNo.4)  Re[2]: 1次元配列の引数に2次元配列の1次元目を渡したい
□投稿者/ ポラ (2回)-(2015/03/21(Sat) 14:31:43)
No75400 (Hongliang さん) に返信
> 基本的に出来ないと考えてください。
> 代わりに、ジャグ配列を使用するのをお勧めしておきます。
>
> int[][] a = new int[5][];
> for (int i = 0; i < a.Length; ++i) a[i] = new int[10];
> a[4][9] = 123;
> func(a[4]);
> Console.WriteLine(a[4][9]);

おおお!
たいへんありがとうございます!
無事解決できました。

C言語と同じようにジャグ配列を渡せばよかったのですね・・・
解決済み
引用返信 編集キー/
■75403 / inTopicNo.5)  Re[2]: 1次元配列の引数に2次元配列の1次元目を渡したい
□投稿者/ ポラ (3回)-(2015/03/21(Sat) 14:33:53)
No75401 (WebSurfer さん) に返信
> 多次元配列(int[,] a)を使う場合は、以下の部分を ⇒ の右側のように修正すれ
> ば OK なはずです。
>
> func(a[4]); ⇒ func(a);
>
> static void func(int[] b) ⇒ static void func(int[,] b)
>
> b[9] += 1; ⇒ b[4,9] += 1;
>

ご回答どうもありがとうございます。m(_ _)m

いや〜
残念ながら2次元のまま渡したくない状況だったのですよ〜♪
引用返信 編集キー/
■75404 / inTopicNo.6)  Re[3]: 1次元配列の引数に2次元配列の1次元目を渡したい
□投稿者/ ポラ (4回)-(2015/03/21(Sat) 14:36:57)
解決しました
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -