六一的部落格


关关难过关关过,前路漫漫亦灿灿。



每次调用函数时,都会重新创建它的形参,并用传入的实参对形参进行初始化

形参初始化的机理与变量初始化一样

根据形参是否为引用, 分两种情况讨论


值传递

passed by value

将实参的值拷贝给形参; 形参和实参是两个不同的实体, 拥有相同的值


引用传递

passed by reference

形参是对实参的引用, 二者对应同一个实体

引用传递的好处:

  1. 避免拷贝, 减少开销
  2. 用来实现多个返回值

如果函数无须改变实参的值,最好将形参声明为拥有底层const的引用


形参为指针类型

C语言中常常使用

C++中建议使用引用传递代替


形参类型是数组时, 会被转换成指向数组首元素的指针

1void print(const int *);
2void print (const int[]);
3void print(const int[10]);

以上3个声明等价, 编译器只检查传入的参数是否为const int *


参数传递


每次调用函数时,都会重新创建它的形参,并用传入的实参对形参进行初始化

形参初始化的机理与变量初始化一样

根据形参是否为引用, 分两种情况讨论


值传递

passed by value

将实参的值拷贝给形参; 形参和实参是两个不同的实体, 拥有相同的值


引用传递

passed by reference

形参是对实参的引用, 二者对应同一个实体

引用传递的好处:

  1. 避免拷贝, 减少开销
  2. 用来实现多个返回值

如果函数无须改变实参的值,最好将形参声明为拥有底层const的引用


形参为指针类型

C语言中常常使用

C++中建议使用引用传递代替


形参类型是数组时, 会被转换成指向数组首元素的指针

1void print(const int *);
2void print (const int[]);
3void print(const int[10]);

以上3个声明等价, 编译器只检查传入的参数是否为const int *