数组形参

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){...}


猜你喜欢

转载自blog.csdn.net/zhengliuguo/article/details/79443933