配列
同じ型の変数を複数連続でつなげたもの。番号(index)で管理。配列の宣言
型名 配列名[要素数];int A[100];
初期化+宣言
int A[5] = { 11, 22, 33 }; ←A[0]~A[2]まで初期化、他はデフォルトで0初期化 for (int i = 0; i < 5; i++){ printf("A[%d] = %d\n", i, A[i]); }
表示イメージ
A[0] = 11
A[1] = 22
A[2] = 33
A[3] = 0
A[4] = 0
A[1] = 22
A[2] = 33
A[3] = 0
A[4] = 0
要素
配列のバイト数
sizeof(変数か配列名)
int A[5]; printf("%lu\n",sizeof(A));
表示イメージ
20
要素数
sizeof(A) / sizeof(A[0])
int A[5]; printf("%lu\n",sizeof(A) / sizeof(A[0]));
表示イメージ
5
配列のコピー
memcpy(コピー先配列名、コピー元配列名、配列全体のサイズ);#include <memory.h>を指定。
注意:コピー先と元のサイズを気にしないので、バッファオーバーランを引き起す時がある。
ちょこっとメモ
コピー先サイズ<コピー元サイズの時、
コピー元の余ったデータが他のデータを上書きしてしまい、エラーを起こすこと。
コピー元の余ったデータが他のデータを上書きしてしまい、エラーを起こすこと。
int array1[] = { 99, 88, 77, 66, 55 }; int array2[] = { 1, 2, 3, 4, 5 }; printf("*** 変更前 ***\n"); for (int i = 0; i < sizeof(array2) / sizeof(array2[0]); i++) { printf("array2[%d] = %d\n", i, array2[i]); } memcpy(array2, array1, sizeof(array1)); printf("*** 変更後 ***\n"); for (int i = 0; i < sizeof(array2) / sizeof(array2[0]); i++) { printf("array2[%d] = %d\n", i, array2[i]); }
表示イメージ
*** 変更前 ***
array2[0] = 1
array2[1] = 2
array2[2] = 3
array2[3] = 4
array2[4] = 5
*** 変更後 ***
array2[0] = 99
array2[1] = 88
array2[2] = 77
array2[3] = 66
array2[4] = 55
array2[0] = 1
array2[1] = 2
array2[2] = 3
array2[3] = 4
array2[4] = 5
*** 変更後 ***
array2[0] = 99
array2[1] = 88
array2[2] = 77
array2[3] = 66
array2[4] = 55