多次元配列(インデックスの切り替えに注意)として、2x3のchar
行列を列の主要な順序で格納しています(これは少し混乱することはわかっていますが、ご容赦ください)。char[3][2]
ここで、このマトリックスを印刷します。ただし、何らかの理由で最後の列が印刷されません。何故ですか?
これが私のコードです:
#include <stdio.h>
#define ARRAY_SIZE(x) ((sizeof (x)) / (sizeof((x)[0])))
typedef char matrix[3][2];
void print_matrix(matrix a)
{
for (size_t i = 0; i < ARRAY_SIZE(a[0]); i++) {
printf("[");
for (size_t j = 0; j < ARRAY_SIZE(a); j++) {
printf(" %c", a[j][i]);
}
printf(" ]\n");
}
}
int main(int argc, char *argv[])
{
matrix a = {{'a','b'},{'c','d'},{'e','f'}};
printf("sizeof(a) = %zu\n", ARRAY_SIZE(a));
printf("sizeof(a[0]) = %zu\n", ARRAY_SIZE(a[0]));
print_matrix(a);
return 0;
}
コンパイルして実行すると、次のようになります。
$ gcc -Wall -std=c99 foo.c; ./a.out
sizeof(a) = 3
sizeof(a[0]) = 2
[ a c ]
[ b d ]
期待される出力:
[ a c e ]
[ b d f ]