引用 '&' 与const

引用:

由于按值传递参数时会为实参生成一个副本,需要花费大量时间和空间,并且无法修改实参。然而引用传递实参时,可以直接使用实参,并且可以修改实参。

实例:

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*

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值