C++引用调用 指针传递
引用调用
操作地址是实参地址,相当于实参的一个**别名**,因而对其操作即对实参的操作
引用规则
(1)引用创建同时需被初始化。
(2)不能有NULL引用。
(3)一旦引用被初始化,即不可改变引用的关系
常量引用调用
如下为常量引用
int findMax(const vector<int> & array);
常量引用保证:
- 省去副本开销
- 函数调用不会改变实参
指针传递
指针传递时,当对形参的指向操作时,就相当于对实参本身进行的操作。指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。
总结
引用调用与指针用于那些可能被函数改变的对象,(指针可改变的特性使其有更多灵活应用)。
传值调用适用于那些不应该被函数改变的对象
常量引用调用适用于那些不应该被函数改变的大型对象
从编译器角度理解
程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变其指向的对象(指针变量中的值可以改),而引用对象则不能修改。
参考文章:
(1) C++ 值传递、指针传递、引用传递详解
(2) 数据结构与问题求解(C++版)》