01 /****************************************/ 02 /* 多次元配列,初期設定,及び,ポインタ */ 03 /* coded by Y.Suganuma */ 04 /****************************************/ 05 #include <stdio.h> 06 07 int main() 08 { 09 /* 10 初期設定された値と確保された領域のサイズ 11 */ 12 int x1[3][2] = {{1, 2}, {3, 4}, {5, 6}}; /* 3行2列 */ 13 int x2[][2] = {{1, 2}, {3, 4}}; /* 2行2列 */ 14 printf("%d (%dバイト)\n", x1[1][1], sizeof(x1)); 15 printf("%d (%dバイト)\n", x2[1][1], sizeof(x2)); 16 17 char c1[5][10] = {"zero", "one", "two", "three"}; /* 5行10列 */ 18 char c2[][10] = {"zero", "one", "two", "three"}; /* 4行10列 */ 19 char *c3[] = {"zero", "one", "two", "three"}; // 使用すべきではない(警告が出力される) 20 printf("%s (%dバイト)\n", c1[3], sizeof(c1)); 21 printf("%s (%dバイト)\n", c2[3], sizeof(c2)); 22 printf("%s (%dバイト)\n", c3[3], sizeof(c3)); 23 /* 24 要素の参照 25 */ 26 int *px = (int *)x1; // 配列 x1 のアドレス( x1 を 1 次元配列として処理,Java では不可) 27 int *px1 = x1[2]; // 配列 x1 の 3 行目の先頭アドレス 28 char *pc = &(c1[2][0]); // pc = c1[2]; でも可 29 printf("%d %d %d %d\n", x1[2][1], px[2*2+1], *(px+2*2+1), px1[1]); 30 printf("%c%c%c %s\n", c1[2][0], pc[1], *(pc+2), pc); 31 32 return 0; 33 }
4 (24バイト) 4 (16バイト) three (50バイト) three (40バイト) three (16バイト) 6 6 6 6 two two