我正在研究 C,特别是使用指针创建矩阵,令我困惑的一件事是,在 2D 数组中,matrix[i][j]
等于
*(*(matrix+i)+j)
这是否意味着位于位置 [3][3]
的元素由 *(*(0+3)+3)) 给出
?
更具体地说,我使用以下代码在 C 中编码矩阵:
double** makeMatrix(unsigned int rows, unsigned int cols)
{
unsigned int i;
double** matrix;
matrix = (double** ) malloc(rows * sizeof(double *));
if (!matrix) { return NULL; }/* failed */
for (i = 0; i < rows; i++)
{
matrix[i] = (double *) malloc(cols*sizeof(double));
if (!matrix[i])
return NULL;
}
return matrix;
}
因此,为数组中的每个第 i 个元素分配内存 - 这就是我们得到 [i][j] 的 ((matrix+i)+j) 的原因 - 由于每个元素都有自己的内存块这一事实?
最佳答案
在 C 中,不存在“真正”意义上的多维数组(如 LISP、C# 或 C++/CLI)。相反,您可以声明的是数组的数组(或指针数组,其中每个指针由 malloc 等分配)。例如:
int matrix[2][3];
定义二元素数组,其中每个元素都是三个 int
类型的数组。
现在,当您引用最终数组元素时,您需要首先取消对该内部数组的引用,然后进入int
对象:
int value = matrix[2][3];
这相当于:
int value = (*(*(matrix + 2) + 3));
关于c - C 中二维数组(矩阵)的分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37655313/