您的位置:首页 > 编程语言 > C语言/C++

C++中用二维数组传参时形参该怎样写[转]

2013-12-03 17:33 190 查看
二维数组的存储方式是和一维数组没什么区别,但是用二维数组做参数,它的形参该怎样写?

要注意的是:函数中的形参其实就相当于一个声明,并不产生内存分配,形参的目的就是要让编译器知道函数参数的数据类型。

正确的是:

void Func(int array[3][10]);

void Func(int array[][10]); //可以省略第一维的大小

错误的是:

void Func(int array[][]);  //这样的用法只能在初始化时可以用

这样写也是错误:

void Func(const int m,const int n, int array[m]
);或

void Func( int m,int n, int array[m]
);

大家都知道数组的索引必须是个常量表达式,void Func(const int m,const int n,int array[m]
);如果const int m没有初始化,那么系统将m或n自动初始化为0,所以这样些是不对的,

如果我们采用这样void Func(int **array, int m, int n)的形式,那么在实际的函数调用是,我们就要进行强制转换才可以用,我们可以这样调用void Func((int **)array, int m, int n);在函数调用时,要把数组形式写成指针形式如*((int*)array + n*i + j);直接写int array[i][j]会导致错误,编译可以通过,在VC编译器中执行会出现异常,DEV编译器会出现一个随机值,原因就在于如果写成int array[i][j],编译器无法正确的寻址,当然各种编译器对它的处理结果是不一样的。

如果我们的形参是数组,那么我们在函数体中可以用指针也可以用数组形式,但是如果我们形参数中用的是指针,最好也用指针,有时用数组形式会出错,二维数组就是这样。

转自:http://www.cnblogs.com/longdouhzt/archive/2012/04/22/2465399.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: