赞
踩
引用,是某一个变量或对象的别名,对引用的操作与对其所绑定的变量或对象的操作等价。
引用在声明时必须进行初始化,如下声明错误:
int& c;//这是错误的声明(声明必须初始化)
正确的声明:
//定义了一个a的引用(别名)c
int a=5;
int &b =a;
不能再将已有的引用名作为其他变量或对象的名字或别名:
int a=5,b=6;
int& c=a;//定义了一个引用c
int& c=b ;//错误,c是a的引用,不能再重复定义
注意:&符号仅且仅在类型后面时表示引用,其他时候表示取地址。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a=5,b=6;
int& c=a;//定义了一个引用c
c=b;
printf("a=%d b=%d c=%d\n",a,b,c);
return 0;
}
执行结果:
可以看到,操作引用c和操作原变量a能达到同样的效果。
既然如此,引用的使用有何必要呢?那就要涉及到其原理。实际上,引用不是定义一个新的变量或对象,因此内存不会为引用开辟新的空间存储这个引用。
举个栗子
利用引用传参实现数值交换:
#include<stdio.h>
#include<stdlib.h>
void swap(int & a,int & b){//引用作为函数的参数
int temp=a;
a=b;
b=temp;
}
int main(){
int v1=10,v2=20;
printf("v1=%d,v2=%d\n",v1,v2);//v1=10,v2=20
swap(v1,v2);
printf("v1=%d,v2=%d\n",v1,v2);//v1=20,v2=10
return 0;
}
这样就不会为形参分配内存空间(使用指针作为函数的形参虽然达到的效果和使用引用相当),但当调用函数时仍需要为形参指针变量在内存中分配空间,而引用则不需要这样,故推荐使用引用而非指针作为函数的参数)。
1.在引用的使用中,单纯给某个变量起别名意义不大,引用的目的主要用于在函数参数的传递中,解决大块数据或对象的传递效率和空间不如意的问题(例如传递复杂的结构体或类时)。
2. 引用本身是目标变量或对象的别名,对引用的操作本质上就是对目标变量或对象的操作。因此能使用引用时尽量使用引用而非指针。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。