c++ - double[][] 不等于 **double 吗?

标签 c++ pointers matrix multidimensional-array

我问这个是因为我的程序有两个乘法矩阵的函数,它们只乘以 4x4 和 4x1 矩阵。标题是:

 double** mult4x1(double **m1, double **m2);
 double** mult4x4(double **m1, double **m2);

他们做 m1*m2 并以 **double 形式返回,下面是 4x4 乘法的片段。

 double** mult4x4(double **m1, double **m2){
      double** result = (double**) malloc(sizeof(double)*4);
      for (int i = 0; i < 4; i++) {
           result[i] = (double*) malloc(sizeof(double)*4);
      }
      ...multiply...
      return result;
 }

mult4x1 和 mult4x4 的区别仅在于它们内部使用的索引。

我有这 3 个矩阵:

double m1[4][4] = {
    {2, 3, 5, 6},
    {9, 8, 1, 7},
    {5, 4, 3, 1},
    {7, 6, 1, 2}
};

double m2[4][4] = {
    {1, 0, 0, 0},
    {0, 1, 0, 0},
    {0, 0, 1, 0},
    {0, 0, 0, 1}
};

double m3[4][1] = {
    {2},
    {3},
    {3},
    {1}
};

尝试将这些矩阵相乘时会出错。

double** test = mult4x4(m1, m2);
double** test2 = mult4x1(identity4x4(), m3);
//identity4x4() creates a 4x4 identity matrix - double** identity4x4();

产量:

error: cannot convert double (*)[4]' todouble*' for argument 1' todouble* mult4x4(double*, double*)'

error: cannot convert double (*)[1]' todouble*' for argument 2' todouble* mult4x1(double*, double*)'

double[][] 不应该等于 **double 吗?一个 double 组。 欢迎任何澄清、误解和错误。

最佳答案

没有。
double** 是指向 double (double*) 的指针。

所以实际上它应该是这样创建的(注意第一个 malloc sizeof() 中的额外 *):

  double** result = (double**) malloc(sizeof(double*)*4);
  for (int i = 0; i < 4; i++) {
       result[i] = (double*) malloc(sizeof(double)*4);
  }

所以在内存中它看起来像这样:

[] -> { d,d,d,d }
[] -> { d,d,d,d }
[] -> { d,d,d,d }
[] -> { d,d,d,d }

有 4 个缓冲区可容纳 4 个 double ,但不是连续的。

虽然您的 double[4][4] 是内存中的连续缓冲区,但如下所示:

 { { d,d,d,d } { d,d,d,d } {d,d,d,d} {d,d,d,d} }

关于c++ - double[][] 不等于 **double 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19636809/

相关文章:

c++ - socket编程发送数据时出现Broken Pipe错误

c++ - 通过指向其第一个元素的指针将数组分配给数组

c - 如何在模块化编程中使用结构?

matlab - 查找矩阵中所有零元素的邻居

python - 使 numpy ndarray 矩阵对称

c++ - 获取 std::bad_alloc 错误;如何交叉验证操作系统是否真的内存不足

c++ - 使类不可 move 的用例(如果有)是什么?

c++ - 优化处理标签(空结构)函数参数

c - 这个C函数声明是什么意思?

matrix - 在 sympy 中获取矩阵乘法的元素方程