首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VC >

CPP中二维数组做参数怎么传入?

2012-01-09 
CPP中二维数组做参数如何传入????我需要写一个dll如下C/C++ code#include stdafx.h#include string.h#

CPP中二维数组做参数如何传入????
我需要写一个dll如下

C/C++ code
#include "stdafx.h"#include <string.h>#include "myCorr_C.h"#include "mex.h"#define TESTAPI  extern "C"  __declspec( dllexport ) int _tmain(int argc, _TCHAR* argv[]){    return 0;}struct DataStruct{   double** data;   double* qoe;};struct ContributionStruct{   double* contribution;};TESTAPI int init(){    if(!mycorr_CInitialize()){        return -1;    }}TESTAPI ContributionStruct* qoc_add(DataStruct* dataStruct){    [color=#FF0000]dataStruct->data[0];//这里我需要从dataStruct中获取到data数组和qoe数组,并且还要将一个新的double数组写入到ContirbutionStruct中的contributin的double数组中,这里数组都是用指针来声明,没有用[],需要求助下,如何对这个DataStruct* 中的2个double数组进行取值赋值操作,比如获取到data数组的长度,一次获取到double数组中的每一个数等[/color]    mxArray *argX=mxCreateDoubleMatrix(3,3,mxREAL);     double data[9] ={-1.5,4,-3,1,2,2,2,3,8};    double qoe[3] = {3,5,6};    double contribution[3];    mxArray *argY=mxCreateDoubleMatrix(3,1,mxREAL);    memcpy(mxGetPr(argX),data,9*sizeof(double));    memcpy(mxGetPr(argY),qoe,3*sizeof(double));     mxArray *coef = NULL;    //memcpy(mxGetPr(X),x,9*sizeof(double));     mlfMycorr(1,  &coef, argX, argY);        double *resultP;    resultP=mxGetPr(coef);    for(int i=0;i<3;i++){        contribution[i]=*(resultP+i);    }    mxDestroyArray(argX);    mxDestroyArray(argY);    mxDestroyArray(coef);    return 0;}TESTAPI int destroy(){    mycorr_CTerminate();    return 0;}


[解决办法]
二维数组的初始化只能省略第一维的数组大小,不能省略第二维的数组大小
不然只知道指向二维数组的指针是如何也不能确定二维数组的维数
[解决办法]
最好将数组维数作为参数传递进去,否则指针很难办。也可以用&传递引用过去
[解决办法]
没看明白你的问题。二维数组指针这样定义:
double (*a)[N]; // N为常数,a即二维数组指针变量。
函数间传递多维数组时,有时不能固定数组的大小,这是可以把多维数组当作一维数组来传递,在使用时根据数组大小参数计算下标的值。例如:
int a[3][2];
int* p = &a[0][0];
p[0]即a[0][0],
p[1]即a[0][1],
p[2]即a[1][0],
p[3]即a[1][1],
p[4]即a[2][0],
p[5]即a[2][1]。
[解决办法]
用两个&
[解决办法]
我建议你去看看C语言中的指针这部分内容!看懂了,这些就不是问题咯~~
[解决办法]
指针数组,或者是传数组的地址都可以吧

[解决办法]
很多人认为指向二维数组的指针就是**,其实是错误的,**是指向指针变量(或指针数组)的指针,二维数组指针的定义方法是double (*a)[N]这种形式。
你目前的应用情况比较复杂,建议你先做个测试程序,在java中把数组初始化为特定的数据,然后调试看一下传递过来的地址里面是什么形式,如何对应的,然后再考虑取数据的方法。

热点排行