引用:
由于按值传递参数时会为实参生成一个副本,需要花费大量时间和空间,并且无法修改实参。然而引用传递实参时,可以直接使用实参,并且可以修改实参。
实例:
int a = 10;
int& b = a; //b为a的别名
void Swap(int& a, int& b)
{
int tmp = a;
a = b;
b = tmp;
}
引用的特点:
1.引用是一个别名;C++底层处理和指针相同 ( 在用到引用变量的地方,系统会自动解引用 );
2.引用变量必须初始化, 并且初始化的变量必须可以取地址;
3.引用是无法改变的, 且只能访问引用变量所引用的内存单元.
(const修饰的变量,C语言中不允许该变量做左值;C++语言中则不允许间接访问该变量)
注意(C++以下几种j情况):
int a = 10;
const int *p = &a;// p为const * ;
int *const* q = &p;//q为int * const *;
/*直接访问为 a;间接访问为 *p、**q;*p为const,无法修改,但**q有间接修改的危险。修改:const int *const*q = &p;*/
int a = 10;
int *p = &a;
const int *const* q = &p;//q为int const* *;
//直接访问为 a;间接访问为*p,**q;*p可以间接修改**q的值;*q可以改变,进而改变**q的值。如:
int b = 20;
int * m = &b;
q = &m;//**q为20;
//修改:
int a = 10;
int *p = &a;
const int *const* q = &p;
//或者:
int a = 10;
const int *p = &a;
const int ** q = &p;
引用 const 指针的结合:
int a = 10;
int &b = a;
//int &c = 20; error,
const int &c = 20; //常引用可以引用立即数, 立即数放到临时量中, 常引用来引用临时量
const int a = 10;
const int& b = a;
// 左操作数的权限 <= 右操作数的权限 const int*(&) <== int*
int a = 10;
const int &b = a;
int a = 10;
int *p = &a;
int* &q = p;//引用不参与类型,q为p的别名
int a = 10;
const int *p = &a;
const int* &q = p; //引用可理解为自动解引用的指针,等价int** q = &p;int* const int*
int a = 10;
int *const p = &a;
const int* &q = p; //error,等价 const int* *《——int* const;应为: int* const &q = p;
int a = 10;
int *p = &a;
int* const &q = p;// int* const int*