我对 mxGetPr 做错了什么

What did I do wrong with mxGetPr

请在 mexFunction

中考虑这段代码摘录
\cppfunc.cpp

void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[]){

  \...Parts where I check the number of lhs and rhs

  double* upper = mxGetPr(prhs[0]);
  double* lower = mxGetPr(prhs[1]);
  double* grids = mxGetPr(prhs[2]);

  mexPrintf("upper 1=%d  \n\n", upper[0] ); 

}

我打算这样调用我的 mex 函数 cppfunc([1 2 3], [1 2 3], [1 2 3])。基本上,它接受三个 MATLAB 向量并通过 mexPrintf 打印出第一个输入向量的第一个元素。输出应该是 1。但是,它 returns:

upper 1=3.

在我看来,该函数是 return 第一个输入向量的长度。例如,如果我做 cppfunc([1 2 3 4], [1 2 3], [1 2 3]),它会 return upper 1=4.

我认为我在调用 mexPrintf 时使用 %d 是正确的,因为 mxGetPr 将输入转换为双精度数组。我错过了什么?

格式 %d 适用于 int 类型的整数值。您必须使用 %f double 秒。
参见 documentation of printf