Я больше программист 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, но это не сработало, поэтому я определил переменную-пустышку.
Я полагаю, что это тривиальная проблема, но я все равно был бы признателен за помощь людей.