【发布时间】:2014-10-28 09:36:55
【问题描述】:
我遇到了一些指针混淆:
我有一些(数值配方)C 函数 fitexy(in, &out),我想将其编译为 .mex 文件,以便从 matlab 中调用它。但是,我无法让网关例程访问 Pointer 到 out 以便将其传递给 plhs[0],我该怎么做?
我得到的最接近的(在最不令人困惑的错误消息的意义上)是这样的:
void mexFunction( int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[]){
float *in;
float out;
in = (float *)mxGetData(prhs[0]);
plhs[0] = mxCreateNumericMatrix(1,1,mxSINGLE_CLASS,mxREAL);
out = (float *)mxGetData(plhs[0]);
fitexy(in, &out);
printf("out = %lf", &out); /*Prints the correct result to the screen*/
}
这会导致编译时出现错误消息:
error: incompatible types when assigning to type ‘float’ from type ‘float *’
这对我来说并不太令人惊讶,但也不是很有帮助。我试图转换/取消引用mxGetData(plhs[0]) 的输出,
out = (float &)mxGetData(plhs[0]);
这似乎是一种废话,
out = (float)mxGetData(plhs[0]);
这与 out 是变量和 mxGetData(plhs[0]) 指针冲突。
我已经找到 Save a variable (float *) to plhs 和 How to return a float value from a mex function, and how to retrieve it from m-file?,但它们都处理强制转换而不是取消引用。
我了解cannot convert parameter 2 from 'mxArray **' to 'mwArray &',但这对我没有帮助,因为我不能(即不希望)更改对我的 C 例程的调用。
非常感谢任何帮助,非常感谢!
【问题讨论】: