在C++中如何将二维数组作为函数参数 |
您所在的位置:网站首页 › 数组如何传参数 › 在C++中如何将二维数组作为函数参数 |
一直以来弄不清C++中数组怎么作为参数传入函数中,尤其是最近学了Python之后,Python这种几乎可以把一切作为参数传入函数的方式更是让我在C++中混淆,下面来总结一下二维数组作为函数参数该如何表示。 1、二维数组的概念 在C语言中,二维数组实际上是一种特殊的一维数组,它的每个元素也是一个一维数组。因此,二维数组下标形式正确写法如下:int arrays[i][j]。数组元素是按照行顺序存储的,因此当按存储顺序访问树时,最右边的数组下标(列)变化的最快。 2、二维数组作为函数参数 规定:如果将二维数组作为参数传递给函数,那么在函数的参数声明中必须指明数组的列数,数组的行数没有太大关系,可以指定也可以不指定。因为函数调用时传递的是一个指针,它指向由行向量够成的一维数组。因此二维数组作为函数参数正确写法如下所示: void Func(int array[3][10]); void Func(int array[ ][10]); 因为数组的行数无关紧要,所以还可以写成如下形式: void Func(int (*array)[10]); 注意*array需要用括号括起来。 这种形式的声明参数是一个指针,它指向具有10个元素的一维数组。因为[]的优先级比*的优先级高,故*array必须用括号括起来,否则变成了 void Func(int *array[10]); 这时候参数相当于是声明了一个数组,该数组有10个元素,其中每个元素都是一个指向整型对象的指针。 但是不能把第二维或者更高维的大小省略,如下面的定义是不合法的: void Func(int array[ ][ ]); 因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多 少列,不能只指定一维而不指定第二维,下面写法是错误的: void Func(int array[3][ ]); 实参数组维数可以大于形参数组,例如形参数组定义为: void Func(int array[3][10]); 而实参数组定义为:int array[5][10]; 进行函数调用Func(array)时,由于数组在内存中是连续存放的,虽然形参与实参数组行数不对应,但是列数是相同的,具有相同的起始地址,这样可以访问到后续的值。如下述程序: 1 #include 2 3 void print_array(int *array, int len) 4 { 5 int i = 0; 6 for ( ; i < len; i++) { 7 printf("%d ",array[i]); 8 } 9 putchar('\n'); 10 } 11 12 void func(int array[3][10]) 13 { 14 print_array(array[0], 10); 15 print_array(array[1], 10); 16 print_array(array[2], 10); 17 print_array(array[3], 10); 18 print_array(array[4], 10); 19 } 20 21 int main() 22 { 23 int array[5][10] = { 24 {0,1,2,3,4,5,6,7,8,9}, 25 {10,11,12,13,14,15,16,17,18,19}, 26 {20,21,22,23,24,25,26,27,28,29}, 27 {30,31,32,33,34,35,36,37,38,39}, 28 {40,41,42,43,44,45,46,47,48,49} 29 }; 30 func(array); 31 return 0; 32 }2. 参数使用一维指针数组。
''' int *array[10]; for(i = 0; i < 10; i++) array[i] = new int[10]; ''' 函数声明:void fuc(int *a[10]); 函数调用:fuc(array); ——在函数fuc中,a是一维指针数组。使用*(a[i] + j)形式来访问数组中元素。 3. 参数使用指针的指针。 int **array; array = new int *[10]; for(i = 0; i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |