mexFunction-解读数组结构

来源:互联网 发布:求好玩的网络手机游戏 编辑:程序博客网 时间:2024/06/05 04:47

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

 这只是我的猜测,不知道对不对,错的话希望指出。

0 0