引用_const_指针

一、引用

1.什么是引用

       引用不是定义一个新的变量,而是给一个已经定义的变量重新起一个别名。

2.定义的格式

  类型&引用变量名=已定义过的变量名。

3.引用的特点

      1)一个变量可以取多个别名。

      2)引用必须初始化。

      3)引用只能在初始化的时候引用一次,不能改变为再引用其他的变量。

int main()
{
	int a = 1;
	int& b = a;
	int& c = a;
	int& d = c;
	cout<<a<<endl;
	cout<<b<<endl;
	cout<<c<<endl;
	cout<<d<<endl;
	return 0;
}

二、const引用

用一个函数来表示常引用与引用的区别:

int main()
{
	int d1 = 4;
	const int& d2 = d1;
	d1 = 5;    //d1的改变d2的值也会随之改变
	//d2 = 6;  //不能给常量(不能被修改的量)赋值

	const int d3 = 1;
	const int& d4 = d3;
	//int& d5 = d3;
	const int& d6 = 5;//常量具有常性,只有常引用可以引用常量

	double d7 = 1.1;
	//int& d8 = d7;   //d7是double类型,d8是int,d7赋值给d8时要生成一个临时变量
		          //也就是说d8引用的是这个带有常性的临时变量,所以不能赋值。
	const int& d9 = d7;
}

三、引用做返回值和引用传参

如果形参为引用类型,则形参是实参的别名。

void Change(int& a, int& b)
{
	int tmp = a;
	a = b;
	b = tmp;
}


int main()
{
	int a = 1;
	int b = 2;
	Change(a,b);
	cout<<"a="<<a<<"  "<<"b="<<b<<endl;
	return 0;
}

在上面的例子中,我们进行传参的时候没有使用指针,但是运行出来之后的结果依旧是正确的。


引用做返回值:

int& Add(int n, int m)
{
	int sum = n+m;
	return sum;
}

int main()
{
	int a = 1;
	int b = 2;
	int ret =Add(a, b);
	cout<<"ret = "<<ret<<endl;
	return 0;
}

上面这个引用做返回值虽然给过是正确的,但是编译器会给出一个warning



原因是传值返回时,是将sum的值放到eax寄存器中。传引用返回时,是取ret的地址放到eax寄存器中。

所以:

1)不要返回一个临时变量的引用。

2)如果返回对象出了当前函数的作用域依旧存在,则最好使用引用返回,因为这样更高效。


四、指针和引用的区别和联系

1)引用只能在定义时初始化一次,之后不能改变指向其他变量(从一而终);指针变量的值可变。

2)引用必须指向有效的变量,指针可以为空。

3sizeof指针对象和引用对象的意义不一样。Sizeof引用得到的是所指向的变量的大小,而sizeof指针是对象地址的大小。

4指针和引用自增(++)自减)(--)意义不一样。

5)相对而言,引用比指针更安全。

总结:指针比引用更灵活,但是也更危险。使用指针时一定要注意检查指针是否为空。指针所指的地址释放后最好置0,否则可能存在野指针的问题。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值