Я больше программист Matlab и не использовал C годами! Теперь мне нужно написать код на C и вызвать его из Matlab с помощью команды mexFunction. Все идет нормально. Но мой код требует многих вызовов функций, где и аргумент, и возвращаемое значение являются массивами. Для этого я использую возврат указателя. Но я столкнулся с миллионом трудностей, когда одна устраняется, возникает другая.
пример кода сортировки выглядит следующим образом (фактический код массивный)
#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, но это не сработало, поэтому я в первую очередь определил фиктивную переменную.
Я предполагаю, что это тривиальная проблема, но я все равно был бы признателен людям за помощь в этом.