1.一维数组做函数参数
void func(int array[])
声明形参数组并不意味着真正建立一个包含若干元素的数组,在调用函数时也不对它分配存储单元,只是用array[ ]这样的形式表示array是一维数组的名字,用来接收实参传来的地址。因此,array【 】中的数值并无实际作用,编译系统对一维数组【】内的内容不予处理,形参一维数组的声明中可以写参数个数,也可以不写。函数首部的下面几种写法都是合法的,作用相同
void func(int array[10]) //指定数组元素个数和实参数组相同
void func(int array[]) //不指定元素个数
void func(int array[5]) //指定元素个数和实参数组不同
2.二维数组做函数参数
规定:如果将二维数组作为参数传递给函数,那么在函数的参数声明中必须指明数组的列数,数组的行数没有太大关系,可以指定也可以不指定。
因此二维数组作为函数参数正确写法如下所示:
void Func(int array[3][10])
void Func(int array[ ][10])
因为数组的行数无关紧要,所以还可以写成如下形式:
void func(int (*array)[10])
注意*array需要用括号括起来。这种形式的声明参数是一个指针,它指向具有10个元素的一维数组。因为[]的优先级比*的优先级高,故*array必须用括号括起来
不能把第二维或者更高维的大小省略,如下面的定义是不合法的:
void Func(int array[ ][ ])
void Func(int array[3][ ])
因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多少列。
实参数组维数可以大于形参数组,例如形参数组定义为:
void Func(int array[3][10]);
而实参数组定义为:int array[5][10]; 进行函数调用Func(array)时,由于数组在内存中是连续存放的,虽然形参与实参数组行数不对应,但是列数是相同的,具有相同的起始地址,这样可以访问到后续的值