我更像是一个 Matlab 程序员,多年来没有使用过 C!现在我必须用 C 语言编写一些代码,并通过 mexFunction 命令从 Matlab 调用它。到目前为止,一切都很好。但是我的代码需要许多函数调用,其中参数和返回值都是数组。为此,我使用指针返回。但是我遇到了大约一百万个困难,一旦一个被修复,另一个被创造出来。
排序代码示例如下(实际代码海量)
#include "mex.h"
#include "math.h"
int Slength=95;
double innercfunction(double q,double y)
{
int i;
double X;
X=q*y;
}
double *c1function(double q,double Sim[])
{
double *F12=malloc(Slength);
int i;
double vdummy,qdummy;
qdummy=q;
for(i=0;i<Slength;i++)
{
vdummy=Sim[i];
F12[i]=innercfunction(qdummy,vdummy);
}
return F12;
}
void mexFunction(int nlhs, mxArray *prhs[],int nrhs,const mxArray *plhs[])
{
double *q=mxGetPr(prhs[0]);
double *Sim=mxGetPr(prhs[1]);
double *SS=c1function(q,Sim);
}
我将它保存为 help_file.c 并从 MATLAB 工作区编译为:
mex -g help_file.c
我收到以下错误:
help_file.c: In function ‘mexFunction’:
help_file.c:38: error: incompatible type for argument 1 of ‘c1function’
help_file.c:17: note: expected ‘double’ but argument is of type ‘double *’
我最初尝试传递 Sim[i] 而不是 vdummy,但这不起作用,这就是我首先定义虚拟变量的原因。
我想这是一个微不足道的问题,但我仍然会感谢人们对此的帮助。