gpt4 book ai didi

c - C 中二维数组(矩阵)的分配?

转载 作者:行者123 更新时间:2023-11-30 21:35:20 25 4
gpt4 key购买 nike

我正在研究 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com