1.
尽管不能以值传递的方式传递数组,但是我们可以把形参写成类似数组的形式
//尽管形式不同,但这三个print函数时等价的
//每个函数都有一个const int*类型的形参
void print(const int*);
void print(const int[]);
void print(const int[10]);//这里的维度表示我们期望数组含有多少元素,实际不一定
2.数组引用形参
c++语言允许将变量定义成数组的引用,基于同样的道理,形参也可以是数组的引用。此时,引用形参绑定到对应的实参上,也就是绑定到数组上:
//正确:形参是数组的引用,维度是类型的一部分
void print(int (&arr)[10])
{
for(auto elem : arr)
cout << elem << endl;
}
【注】:&arr两端的括号必不可扫
f(int &arr[10]) //错误:将arr声明成了引用的数组
f(int (&arr)[10]) //正确:arr是具有10个整数的整型数组的引用
因为数组的大小是构成数组类型的一部分,所以只要不超过维度,在函数体内就可以放心地使用数组。但是,这一用法也无形最中限制了print函数的可用性,我们只能将函数作用于大小为10的数组:
int i = 0; j[2] = {0,1};
int k[10] = {0,1,2,3,4,5,6,7,8,9};
print(&i); //错误实参不是含有10个整数的数组
print(j);//错误:同上
print(k);//正确:实参是含有10个整数的数组
3.传递多维数组
//matrix指向数组的首元素,该数组的元素是由10个整数构成的数组
void print(int (*matrix)[10],int rowSize) {/**/} //将matrix声明成指向含有10个整数的数组的指针
等价于
void print(int matrix[][10], int rowSize){/**/}//看起来是一个二维数组,实际上形参是指向含有10个整数的数组的指针。
【注】再一次强调,*matrix两端的括号必不可少
int *matrix[10]; //10个指针构成的数组
int (*matrix)[10]; //指向含有10个整数的数组的指针
4.main命令行选项
int main(int argc, char *argv[]) {...}
等价于
int main(int argc, char **argv){...}