Download presentation
Presentation is loading. Please wait.
1
プログラミング 3 2 次元配列
2
1 次元配列 名前と(1 つの)番号で個々の変数(要素)を指定で きる一連の変数
int a[5]; と定義された配列は,a[0],a[1],a[2],a[3], a[4] の 5 つの要素を持つ
3
2 次元配列(1) 2 つの番号で要素を指定する配列:2 次元配列 縦横に箱が並んだようなものを想像するとよい 表形式のデータ
縦横に箱が並んだようなものを想像するとよい 表形式のデータ 宣言のしかた 型名 配列名[次元 1 の個数][次元 2 の個数]; int a[3][4]; a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3]
4
2 次元配列(2) 2 次元配列の初期化 int a[3][4] = {{ 3, 1, 4, 1 }, { 5, 9, 2, 6 }, { 5, 3, 5, 8 }}; 「4 個の配列が 3 個」とみる cf. 1 次元の場合 int a[10] = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3 };
5
2 次元配列(3) 2 次元配列は 2 重の繰り返しとともに使用されるこ とが多い int a[3][4], i, j; for (i = 0; i < 3; i++) { for (j = 0; j < 4; j++) { a[i][j] = 0; } }
6
2 次元配列と関数(1) 2 次元配列も関数に渡すことができる
ただし,1 次元配列と同じ受け渡しではない 1次元配列の場合: void func(int a[]) void func(int *a) 2 次元配列を受け取る関数は,2 次元めの要素数を指 定しなければならず,渡す配列は 2 次元めの要素数 が合致していなければならない void func(int a[][5]) [] と書けるのは 1 次元めのみ(int a[][] とは書けない) この関数に渡せるのは 2 次元めの要素数が 5 の 2 次元配列 のみ 呼び出すとき引数にするのは配列名のみ(func(x);)
7
2 次元配列と関数(2) void func(int a[][5]) が受け取れる配列 x[3][5],x[10][5] など
2 次元配列の場合も先頭要素のアドレスが渡されるが,詳細 は難しい 読み替えは void func(int (*a)[5]) になる どんな大きさの 2 次元配列でも受け取れる関数は特別な方法 を使わないと作れない
8
2 次元配列と関数(3) int sumAry2D(int a[][10], int n) { int i, j, s; s = 0; for (i = 0; i < n; i++) { for (j = 0; j < 10; j++) { s += a[i][j]; } } return s; }
9
2 次元配列と関数(4) 2 次元配列は「配列の配列」 たとえば a[3][4] は,「4 個の配列」の 3 個の配列
a[0][],a[1][],a[2][] は 1 次元配列として扱える 1 次元配列を受け取る関数に,2 次元配列の一部を渡せる func(a[0]) と渡すと,a[0][0],a[0][1],……,の 1 次元 配列を渡せる
10
ポインタの配列 ポインタも変数の一種→配列が作れる int *p[10]; int へのポインタ 10 個の配列
ポインタの配列を受け取る関数 void func(int *a[]) void func(int **a) ポインタへのポインタ型が現れる *a:a の指す先(int * 型) **a:a の指す先(ポインタ)の指す先(int 型) ポインタへのポインタは, int **pp; のように宣言する
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.