我想创建一个矩阵指针数组。
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/