如何在c++ mex文件中访问多维数组输入

how to access multidimensional array input in C++ mex file

本文关键字:访问 数组 输入 文件 c++ mex      更新时间:2023-10-16

我用c++编写了程序,需要在matlab中编写一个c++mex函数来传递输入参数并检索一些输出值。但是我在访问多维数组时遇到了一些问题。下面是我写的一段代码和错误信息。W的声明如下:

double **W;
W[i][j];
for  (int i=0;i < 6; i++)
{
    for (int j=0;j<6;j++)
    {
        //B[j + 6*i] = W[i][j];
        B[j + 6*i] = W[i + 6*j];     
    }
}

和编译时,我得到以下错误消息:

cannot convert ‘double*’ to ‘double’ in assignment

表示为双** W的二维数组需要分配空间。首先,您需要分配每一行。下面的代码说明了这一点:

#include <iostream>
using namespace std;
int main() {
int rows = 6, cols = 6;
double **W; 
W = new double* [rows];
// allocate each row
for (int i = 0; i < rows; i++) {
    W[i] = new double [cols];
}
for (int i = 0; i < 6; i++) {
    for (int j = 0; j<6; j++) { 
        // do work here
    }
}
// clean up in the end:
if (W != nullptr) {
    for (int i = 0; i < rows; i++) {
        delete[] W[i];
    }
    delete[] W;
    W = nullptr;
}
return 0;
}

以下代码是错误的:

double **W;
W[i][j];

声明W为:

double W[i][j];

或者阅读:如何在c++中使用new.

声明2d数组

你的2D数组访问语法

B[j + 6*i] = W[i + 6*j]; 

也是错误的

你想这么做吗?

B[j][6*i] = W[i][6*j];// if B is 2D array

B[j + 6*i] = W[i][6*j];// if B is 1D array