VC,怎么在函数中传入数组三维数组

在mexfunction函数中,从MATLAB传三维数组,应该怎么提取?谢谢!
void mexfunction(){double * int M,N; int i,j; data=mxGetPr(prhs[0]); //获得指向矩阵的指针 M=mxGetM(prhs[0]); //获得矩阵的行数 N=mxGetN(prhs[0]); //获得矩阵的列数 for(i=0;i&M;i++) {    for(j=0;j&N;j++)
    mexPrintf(&%4.3f   &,data[j*M+i]);
    mexPrintf(&\n&);
 }} 那传进来的是三维数据怎么提取数据,谢谢!!
10-06-07 &
楼主&怎么搞的&&分享一下呗
请登录后再发表评论!C语言中多维数组指针作为函数参数传递_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C语言中多维数组指针作为函数参数传递
上传于||文档简介
&&c​语​言​经​典​题
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢2014年7月 Java大版内专家分月排行榜第二
2015年1月 Java大版内专家分月排行榜第三2014年8月 Java大版内专家分月排行榜第三
2016年1月 Java大版内专家分月排行榜第二2015年12月 Java大版内专家分月排行榜第二2015年8月 Java大版内专家分月排行榜第二2015年3月 Java大版内专家分月排行榜第二2015年1月 Java大版内专家分月排行榜第二2014年12月 Java大版内专家分月排行榜第二2014年11月 Java大版内专家分月排行榜第二2014年6月 Java大版内专家分月排行榜第二2014年4月 Java大版内专家分月排行榜第二2014年1月 Java大版内专家分月排行榜第二2013年11月 Java大版内专家分月排行榜第二
2015年9月 Java大版内专家分月排行榜第三2015年6月 Java大版内专家分月排行榜第三2015年5月 Java大版内专家分月排行榜第三2015年2月 Java大版内专家分月排行榜第三2014年3月 Java大版内专家分月排行榜第三2013年12月 Java大版内专家分月排行榜第三
2014年7月 Java大版内专家分月排行榜第二
2015年1月 Java大版内专家分月排行榜第三2014年8月 Java大版内专家分月排行榜第三
2014年7月 Java大版内专家分月排行榜第二
2015年1月 Java大版内专家分月排行榜第三2014年8月 Java大版内专家分月排行榜第三
2013年10月 总版技术专家分月排行榜第三
2014年3月 Java大版内专家分月排行榜第一2014年1月 Java大版内专家分月排行榜第一2013年12月 Java大版内专家分月排行榜第一2013年11月 Java大版内专家分月排行榜第一2013年10月 Java大版内专家分月排行榜第一
2014年7月 Java大版内专家分月排行榜第二
2015年1月 Java大版内专家分月排行榜第三2014年8月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。&&/&&&&/&&&&/&&
在把数组作为参数传递给函数时,有值传递(by value)和地址传递(by reference)两种方式。在值传递方式中,在说明和定义函数时,要在数组参数的尾部加上一对方括号([]),调用函数时只需将数组的地址(即数组名)传递给函数。例如,在下例中数组x[]是通过值传递方式传递给byval_func()函数的:
# include &atdio.h&
voidbyval_func(int[]);&&&&&& /*the& byval_func()& function is passed an
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& integer array by value * /
void main (void);
void main (void)
&&& int x[10];
&&&& /* Set up the integer array. * /
&&&& for (y=0; y&10;&& y++)
&&&&&&& x[y] =
&&&& /* Call byval_func() ,passing the x array by value. * /
&&&& byval_func(x);
/* The byval_function receives an integer array by value. * /
void byval_func(int i[])
&&&& /* print the content: of the integer array. * /
&&&& for (y=0; y&10;& y++)
&&&&&&&& printf(&%d\n&, i[y]);
在上例中,定义了一个名为x的数组,并对它的10个元素赋了初值。函数byval_func()的说明如下所示:
&&& intbyval_func(int []);
参数int[]告诉编译程序byval_func()函数只有一个参数,即一个由int类型值组成的数组。在调用byval_func()函数时,只需将数组的地址传递给该函数,即:
&&& byval_func(x);
在值传递方式中,数组x将被复制一份,复制所得的数组将被存放在栈中,然后由byval_func()函数接收并打印出来。由于传递给byal_func()函数的是初始数组的一份拷贝,因此在byval_func()函数内部修改传递过来的数组对初始数组没有任何影响。
值传递方式的开销是非常大的,其原因有这样几点:
第一,需要完整地复制初始数组并将这份拷贝存放到栈中,这将耗费相当可观的运行时间,因而值传递方式的效率比较低;
第二,初始数组的拷贝需要占用额外的内存空间(栈中的内存);
第三,编译程序需要专门产生一部分用来复制初始数组的代码,这将使程序变大。
地址传递方式克服了值传递方式的缺点,是一种更好的方式。在地址传递方式中,传递给函数的是指向初始数组的指针,不用复制初始数组,因此程序变得精练和高效,并且也节省了栈中的内存空间。在地址传递方式中,只需在函数原型中将函数的参数说明为指向数组元素数据类型的一个指针。请看下例:
# include &atdio. h&
void conat_func(const int* );
void main (void);
void main(void)
&&& int x[10];
&&&& /* Set up the integer array. * /
&&&& for (y=0; y&10;&y++)
&&&&&&& x[y] =&
&&&& /* Call conat_func(), passing the x array by reference. */
&&&& conat_func(x);
/*The& const_function receives an integer array by reference.
&& Notice that the pointer i& declared aa const, which renders
&& it unmodif table by the conat_funcO function. * /
void conat_func(conat int* i)
&&&& / * print the contents of the integer array. * /
&&& for (y=0; y&10; y++)
&&&&&&&& printf(&&%d\n&, *(i+y));
在上例中,同样定义了一个名为x的数组,并对它的10个元素赋了初始值。函数const_func()的说明如下所示:
&&& int const_func(const int&);
参数constint&告诉编译程序const_func()函数只有一个参数,即指向一个int类型常量的指针。在调用const_func()函数时,同样只需将数组的地址传递给该函数,即:
&&& const_rune(x);
在地址传递方式中,没有复制初始数组并将其拷贝存放在栈中,const_rune()函数只接收到指向一个int类型常量的指针,因此在编写程序时要保证传递给const_func()函数的是指向一个由int类型值组成的数组的指针。const修饰符的作用是防止const_func()函数意外地修改初始数组中的某一个元素。
地址传递方式唯一的不足之处是必须由程序本身来保证将一个数组传递给函数作为参数,例如,在函数const&rune()的原型和定义中,都没有明确指示该函数的参数是指向一个由int类型值组成的数组的指针。然而,地址传递方式速度快,效率高,因此,在对运行速度要求比较高时,应该采用这种方式。
推荐文章 TOP10}

我要回帖

更多关于 c语言函数传入数组 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信