int a = 10;
int *b = &a; //指针
int &c = a; //引用
引用c相当于a的别名,修改c相当于修改a
int &c = a; 的过程“相当于”(注意不是等于,只是为了方便理解而已)以下两个步骤:
第一步:int *c_reference = &a; 即,首先定义一个指针指向变量的地址
第二步:#define c (*c_reference); 然后将引用的名字定义为该指针的取值符号
引用的优点:
作为参数传递到子函数时不产生参数变量的副本,即不会复制参数变量的内容到函数堆栈的顶部(注意不是push压栈,具体操作请看《深入理解》)
但c++的编译器到底是如何传参的我还没有去研究,有兴趣的朋友可以去研究下,我的猜测是:“传递指针到子函数,但编译器维护着引用的使用方法,因此每次使用这个参数,将用(%exx)(相当于上面说的*c_reference)的方法来实现。”