我有一个 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 ]
最佳答案
这是因为你的功能是有效的:
void print_matrix(char a[3][2])
但这真的是:
void print_matrix(char (*a)[2])
所以您的宏使用 sizeof
产生了错误的结果(您正在计算指针的大小,以及两个元素 char
数组的大小)。如果将这两个值作为参数传递给函数并在循环中使用它们,它应该可以工作。
关于c - 为什么我的矩阵的最后一列没有打印出来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15467575/