c - 为什么我的矩阵的最后一列没有打印出来?

标签 c multidimensional-array

我有一个 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/

相关文章:

c - 如何从启动时运行的脚本打开文件

c - 暂时用其他容器替换容器

c# - 如何在 C# 中将二维数组打印到控制台

java - 如何在java中的 ListView 中绑定(bind)arraylist

php - 检查多维数组的任何子数组中的特定键是否存在特定值

java - 三维数组

c - 让 opencv 工作(段错误)

c - 为什么这段代码中的 `bar`没有静态存储持续时间?

java - 寻找更新多维数组的有效方法

c - 最优数组推送