传参有值传递和引用传递两种方式.
值传递用在参数较小的情况下,值传递过程中,形参和实参独立.对形参的修改不会影响实参.
引用传递用在:传递的参数较大或者不支持拷贝时.引用传递可以避免拷贝实参,但对形参的修改会直接影响实参.
数组形参
数组的两个特殊性质对我们定义和使用作用在数组上的函数有影响.这两个特殊性质是:
- 不允许拷贝数组
- 使用数组时通常会将数组名转换为指向数组首元素的指针
因为不能拷贝数组,所以我们不能以值传递的方式使用数组参数.因为数组会被转换为指针,所以当我们为函数传递一个数组时,实际上传递的是一个指向数组首元素的指针(传入的数组的大小对函数调用没有影响).
三个形式不同但等价的函数声明:
1 | void print(const int*); |
尽管形式不同,但上面三个函数是等价的:每个函数的唯一形参都是const int*类型的.当编译器处理对print函数的调用时,只检查传入的参数是否是const int *类型的(这里的const是底层的,是表示指针指向的是常量对象).