2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[C言語]2次元配列とポインタの配列の違い

Posted at

転職して業務系のSE(Java)から組み込み系PGの見習いになったので、C言語の研修で聞いた内容で、今まで自分が知らなかった部分のメモとして書きます。
勉強中ですので、経験者の方のツッコミをお待ちしております。

2次元配列とポインタの配列の違い

2次元配列は1次元配列と同じように連続したメモリの領域を確保する。
ポインタの配列の場合、2次元目の配列(1次元目の配列が指す先)はメモリ上のどこかにあり、他の2次元目の配列とは連続している必要は無い。

また、2次元配列の場合、アドレスを保持しているのはarray[0][0]のアドレスだけであり、array[1][0]にアクセスするときは
&array[0][0]+1*(2次元目の配列の要素数)+0という式を使う。
そのため、2次元配列を関数の引数として渡すときには、関数側で2次元目の要素数を指定しておく必要がある。

2次元配列を関数に渡す
// 2次元配列を渡すときは2次元目の要素数を確定させる必要がある。
void func1(int array[][5]) {
	array[1][0] = 1;	// *(array + (1*5) + 0) = 1;と同義
}

// 2次元目の要素数を引数に取れば、以下のような書き方もできる。
void func2(int num, array[][num]) {
}
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?