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

标签 c arrays matrix

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

相关文章:

c++ - C 中的图像处理

javascript - 获取由 Javascript 对象组成的 indexOf Javascript 数组

c - 如何将多维 C 数组传递给函数?

r - "natively"如何在 R 中存储六边形网格?

c - 在 Linux 中查找进程产生的线程数

c - vim中分割线的出现

c - 使用 epoll 的多线程 UDP 服务器?

java - Java 数组多项式加减法

javascript - 在 2D 矩阵数组中移动 Sprite - JavaScript

用固定值替换非对角线元素