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 }