mexFunction-解讀數組結構

 今天下午看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 豎着排成的。

 這只是我的猜測,不知道對不對,錯的話希望指出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章