二、Matlab调用C/C++之传地址

我们在Matlab中使用C/C++时,需要传入和传出参数,以下我们将以实例完成该功能。

1、外部接口设计

a=test([1,1,1,2,4],4)

参数:b=[1,1,1,2,4]为输入的数组;4为计算参数p;a为返回数组,为p*b;

2、C程序设计

#include "mex.h"

void GetValueFunction(double *x, int dim,int functionNum, double y[]){//
    //int length = 0;
    //length = sizeof(x);///sizeof(x[0]);
    //double *y=new double[sizeof(x)*dim];
    mexPrintf("functionNum:%d\n", functionNum);
    if(functionNum == 1){
        for(int i=0;i             *(y+i) = 1.0*x[i];
    } else {
        for(int i=0;i             *(y+i) = functionNum*x[i];
    }
    //for(int i=0;i     //        *(y+i) = 22;//2.0*x[i];
    mexPrintf("*y=%d\n",dim);
    for(int i=0;i     mexPrintf("\n*x=");
    for(int i=0;i     //return -1;
}

//设置接口
void mexFunction(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[])
{
    double* a;
    double b, c;
    double *x,*y;
    int mrows = mxGetM(prhs[0]);//获得输入数据矩阵的行数
    int ncols = mxGetN(prhs[0]);//获得输入数据矩阵的列数
    int dim = ncols;
    mexPrintf("output nlhs = %d mrows=%d ncols=%d\n", nlhs,mrows,ncols);

    plhs[0] = mxCreateDoubleMatrix(mrows, ncols, mxREAL);//分配输出矩阵的内存
    int functionNum = *(mxGetPr(prhs[1]));//第三个输入参数,第几个函数
    x = mxGetPr(prhs[0]);
    y = mxGetPr(plhs[0]);//获取输出指针的第一个参数a[]的地址
    mexPrintf("input nrhs = %d\n", nrhs);//nrhs输入参数的数量
    
    mexPrintf("functionNum  = %d\n", functionNum);
    mexPrintf("dim = %d\n", ncols);
   
    mexPrintf("y=");
    for(int i=0;i     mexPrintf("\nx=");
    for(int i=0;i     mexPrintf("\n");

    GetValueFunction(x,ncols,functionNum,y);
}

你可能感兴趣的:(Matlab,matlab)