传参

传参有值传递和引用传递两种方式.
值传递用在参数较小的情况下,值传递过程中,形参和实参独立.对形参的修改不会影响实参.
引用传递用在:传递的参数较大或者不支持拷贝时.引用传递可以避免拷贝实参,但对形参的修改会直接影响实参.

数组形参

数组的两个特殊性质对我们定义和使用作用在数组上的函数有影响.这两个特殊性质是:

  • 不允许拷贝数组
  • 使用数组时通常会将数组名转换为指向数组首元素的指针

因为不能拷贝数组,所以我们不能以值传递的方式使用数组参数.因为数组会被转换为指针,所以当我们为函数传递一个数组时,实际上传递的是一个指向数组首元素的指针(传入的数组的大小对函数调用没有影响).
三个形式不同但等价的函数声明:

1
2
3
void print(const int*);
void print(const int[]);
void print(const int[10]); // 这里的维度表示我们希望数组含有多少个元素,但实际情况不一定

尽管形式不同,但上面三个函数是等价的:每个函数的唯一形参都是const int*类型的.当编译器处理对print函数的调用时,只检查传入的参数是否是const int *类型的(这里的const是底层的,是表示指针指向的是常量对象).