matlab mex:访问数据

tim*_*tim 1 matlab mex

嘿那里,我真的不明白如何访问通过matlab中的参数传递给mex函数的数据.假设我有'默认'网关功能

void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
Run Code Online (Sandbox Code Playgroud)

现在我得到了指向1.输入参数的指针:

double* data_in;
data_in = mxGetPr(prhs[0]);
Run Code Online (Sandbox Code Playgroud)

以下几行每个单独使我的matlab崩溃:

mexPrintf("%d", *data_in);
mexPrintf("%d", data_in[1]);
Run Code Online (Sandbox Code Playgroud)

但是,当data_in显然是指向第一个参数的指针时,为什么我不能访问数据呢?

  1. 我什么时候需要将指针声明为double*,何时声明为mxArray*?有时我会看到类似的东西:mxArray*arr = mxCreateDoubleMatrix(n,m,mxREAL);!?

非常感谢提前!

nim*_*odm 5

data_in是一个指针,double所以你需要类似的东西

mexPrintf("%f", data_in[0]);
Run Code Online (Sandbox Code Playgroud)

这假设调用者传递了大小> 0的向量或矩阵.

更一般地说,你可以

int n = mxGetN(array);
int m = mxGetM(array);
Run Code Online (Sandbox Code Playgroud)

获取传递给mex函数的矩阵/向量的行数和列数.

关于mxArray:

Matlab将其矩阵(复杂和真实)打包在mxArray结构中.mxCreateDoubleMatrix返回指向此类结构的指针.要实际访问该数据,您需要对实部使用mxGetPr(),对虚部使用mxGetPi().

这些返回指向已分配double[]数组的指针,您可以使用它们来访问(读取和写入)矩阵的元素.