今天下午看tld 代碼,看到over_lap 函數裏,輸入的第二個變量明明是二維數組,但是在mexfunction裏只用 *x 就能引用返回值,發現和c不一樣啊,於是動手寫了個小測試 C.cpp
#include <mex.h>
double add(double a,double b){
return a+b;}
void mexFunction(int nlhs ,mxArray *plhs[] ,int nrhs, const mxArray *prhs[])
{
double *x = mxGetPr(prhs[0]);
double *z=x+1;
int M1 = mxGetM(prhs[0]); int N1 = mxGetN(prhs[0]);
mexPrintf("Hello word!\n");
mexPrintf("%d%d\n",M1,N1);
mexPrintf("%f\n",z[3]);
mexPrintf("%f\n",x[3]);
} 在matlab中 mex 生成可執行代碼,建立兩個變量 a=[2,3,4;4,5,6] b=[8 9 0]
然後運行C(a,b) 輸入 2 3// a 是2*3的矩陣
4.0000
6.0000 如果是c的話x[3] 肯定會出錯的而且也得不到值,這裏卻得到了6 ,如果 豎着數a的話,發現0,1,2,3 第四個剛好是6. 同樣 *z=x+1,但是z[3] 怎麼會是4呢 ,如果同樣,z指向 a 的5(豎排第2個),那麼z[3] 也就是5 再往回3個 剛好是4 。這下可以看出 x 其實就像是指向一個一維數組 ,這個數組是把a 豎着排成的。
這只是我的猜測,不知道對不對,錯的話希望指出。