我想创建一个矩阵指针数组。

int matrix1[4][1] = {
    {1} ,
    {2} ,
    {3} ,
    {4}
};

int matrix2[2][2] = {
    {1, 2} ,
    {3, 4}
};

我正试图找出如何创建一个指针数组来调用这些矩阵。
矩阵[0][0][0]应返回1,矩阵[1][1][1]应返回4。
到目前为止,我已经尝试了这种方法,但我得到的分割错误。
int *** matrix = (int ***)malloc(2 * sizeof(int **));
matrix[0] = &matrix1;
matrix[1] = &matrix2;

最佳答案

我们先假设二维数组:

int x[2][2];

现在的x[0]类型不是int*,而是int[2]。类似地,&x[0]不是int**类型,而是int(*)[2]类型。您可能以前没有看到过,它是指向两个元素数组的指针。
如果现在x衰减到指针,则它衰减到完全相同的指针类型(int(*)[2])。
不幸的是,指向不同大小数组的指针不兼容(int(*)[10]int(*)[12]无关,只是共享相同的底层类型)。因此,除非使用void*指针,否则无法将它们放入同一数组中。但是您可能会丢失有关数组大小的任何信息,所以很可能,这不是我们要做的事情。
我个人推荐一个结构:
typedef struct
{
    size_t rows;
    size_t columns;
    int*   data;
} matrix;

加上一些助手:
int get(matrix* m, int r, int c)
{
    return m->data[m->columns * r + c];
}

// perhaps yet setter, constructing and destructing functions?

这种结构可以很容易地放入数组中。。。

关于c - 如何做矩阵指针数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53822229/

10-10 01:29
查看更多