C++中 引用 和 const

在C++中,引用是给已经存在的变量取一个别名,引用既可以传值也可以达到指针的效果,它和它的引用的变量共用同一块内存空间。

1.引用

定义的格式为:
类型 &引⽤变量名 = 已定义过的变量名;

int a=10;//定义一个整型变量
int &ra=a;//&为引用标志,ra与a类型必须一样

数组的引用

int a[10];
int(&ra)[10]=a;

引⽤的性质:
1. ⼀个变量可取多个别名
2. 引⽤必须初始化
3. 引⽤只能在初始化的时候引⽤⼀次,不能改变为再引⽤其他的变量。

2.const引用 (常引用)

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



 const int d3 = 1;
 //int&d5 = d3;
 //d1不能被修改,d5可以去修改d3的值,所以错误
 const int & d6 = d3; 
 // 常量具有常性,只有常引用可以引用常量


 double d7 = 1.1;
 //int& d8 = d7;
 //类型不同,不能引用。
 const int& d9 = d7;
 //加const,d9=1,因为生成了临时变量,但是不是引用,d9和d7地址不同
}

3.引用做引用传参和返回值

引用作为参数
1.【值传递】如果形参为⾮引⽤的传值⽅式,则⽣成局部临时变量接收实参的值

void Swap (int left, int right) // 这能实现交换吗?
{
 int temp = left;
 left = right ;
 right = temp ;
}

优点:不会影响实参
缺点:无法通过修改参数改实参

2.【引⽤传递】如果形参为引⽤类型,则形参是实参的别名。

void Swap (int& left, int& right)//形参是外部实参的别名
{
 int temp = left;
 right = left ;
 left = temp ;
}

3.【指针传递】

void Swap (int* pLeft, int* pRight)
{
 int temp = *pLeft;
 *pLeft = *pRight;
 *pRight = temp;
}

优点:可以通过参数改参数
缺点:指针选错容易出错

引用做返回值

1. 不要返回一个临时变量的引用。
2. 如果返回对象出了当前函数的作用域依旧存在,则最好使用引用返回,因为这样更有效。

4.对比指针和引用

引⽤和指针的区别和联系(注意笔试的时候⾮常喜欢考这个知识点)
1. 引用在定义时必须初始化,指针无要求
2. 一旦一个引用被初始化为指向一个对象,就不能再指向其他对象;
指针可以在任何时候指向任何一个同类型对象。
3. 没有NULL引用,但有NULL指针。
4. 在sizeof中含义不同:引用结果为引用类型大小;但是指针始终是地址空间所占的字节数;(32位平台下为4个字节,64位平台下为8个字节。)
5. 引用自加改变变量内容,指针自加改变指针指向下一个类型的大小。
6. 有多级指针,但无多级引用。
7. 引用比指针使用起来安全。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值