C++Primer 6.2节——参数传递 续数组形参
1、数组形参
①数组的两个性质:不允许拷贝数组以及使用数组时通常会将其转换成指针。
②当给函数传递一个数组时,实际上传递的是指向数组首元素的指针。
③数组形参的定义:
(1)void print(const int*);
(2)void print(const int[]);
(3)void print(const int[10]);
以上三个函数都是等价的,每个函数的形参类型都是const int*。
④表示数组大小的三种方式
(1)使用标记指定数组长度。
条件:使用这种方法的数组本身必须包含一个结束标记,典型事例是C风格字符串。C风格字符串存储在字符数组中,以空字符/0结束。
(2)使用标准库规范
方法:传递指向数组首元素和尾后元素的指针。
条件:使用标准库中的begin和end函数提供所需要的指针。
(3)显示传递一个表示数组大小的形参
方法:专门定义一个表示数组大小的形参,数组大小的类型是size_t。
⑤数组形参和const
当函数不需要对数组元素执行写操作的时候,数组形参应该是指向const的指针。
⑥数组引用形参
函数的形参是对数组的引用类型,如:
void print(int (&arr)[10]); //形参是一个对具有10个int型元素的数组的引用。
⑦传递多维数组
(1)当将多维数组传递给函数时,真正传递的是指向数组首元素的指针,因为多维数组的首元素也是数组,所以传递的是指向数组的指针。
(2)数组的第二位(以及后面的所有维度)的大小都是数组类型的一部分,不能省略。
(3)传递多维数组的函数的定义方式:
Ⅰ、void print(int (*matrix)[10],int rowsize);
Ⅱ、void pirnt(int matrix[][10],int rowsize); //这两个函数都是等价的,第一个维度通常会被省略掉。它们的形参都是指向含有10个整数的数组的指针。