1.数组形参
数组特性
- 不允许拷贝数组
- 使用数组时通常会将其转换为指针
void print(const int*) {
}
void print(const int[]) {
}
void print(const int[10]) {
}
上述的函数的数组形参是等价的,即都为 const int*,其中当函数不需要对数组元素只想写操作的时候,数组形参应该指向const指针。
只有当函数确实要改变元素值的时候,才把形参定义成指向非常量的指针
1.1 管理指针形参的三种技术
1.1.1 使用标记指定数组长度
例如C语言的字符串是以最后空字符串作为特殊标记,故函数处理C风格字符串遇到空字符串就停止
1.1.2 使用标准库规范 C++11
原理:传递数组的首元素和尾元素的指针
#include <iostream>
#include <vector>
#include <string>
using namespace std;
void print(const int *beg, const int *end) {
while(beg != end) {
cout << *beg++ <<endl;
}
}
int main() {
int data = {0, 1,5 ,3, 3,34, 4,4};
print(begin(data), end(data));
return 0;
}
1.1.3 显示传递一个表示数组大小的形参
void print(const int ia[], size_t size) {
}
2.数组引用形参
即形参也可以是数组的引用
#include <iostream>
#include <vector>
#include <string>
using namespace std;
void print(int (&arr)[10]) {
for(int i =0 ; i != 10; i++) {
cout << arr[i] <<endl;
}
}
int main() {
int j[10] = {0,1,2,3,4,5,6,7,8,9,};
print(j);
return 0;
}
3.传递多维数组
C++语言实际上没有真正的多维数组,所谓多维数组其实是数组的数组,故作为形参真正传递的是指向数组首元素的指针。
其中数组的第二维的大小都是数组类型的一部分
// matrix 指向数组的首元素, 该数组的元素是由10个整数构成的数组
void print(int matrix[10], int rowSize) {
}