详解C++ 引用
引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。
C++引用vs指针
引用很容易与指针混淆,它们之间有三个主要的不同:
- 不存在空引用。引用必须连接到一块合法的内存。
- 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
- 引用必须在创建时被初始化。指针可以在任何时间被初始化。
C++中创建引用
试想变量名称是变量附属在内存位置中的标签,您可以把引用当成是变量附属在内存位置中的第二个标签。因此,您可以通过原始变量名称或引用来访问变量的内容。例如:
inti=17;
我们可以为i声明引用变量,如下所示:
int&r=i; double&s=d;
在这些声明中,&读作引用。因此,第一个声明可以读作"r是一个初始化为i的整型引用",第二个声明可以读作"s是一个初始化为d的double型引用"。下面的实例使用了int和double引用:
#includeusingnamespacestd; intmain() { //声明简单的变量 inti; doubled; //声明引用变量 int&r=i; double&s=d; i=5; cout<<"Valueofi:"< 当上面的代码被编译和执行时,它会产生下列结果:
Valueofi:5
Valueofireference:5
Valueofd:11.7
Valueofdreference:11.7引用通常用于函数参数列表和函数返回值。下面列出了C++程序员必须清楚的两个与C++引用相关的重要概念:
把引用作为参数
C++支持把引用作为参数传给函数,这比传一般的参数更安全。
#includeusingnamespacestd; //函数声明 voidswap(int&x,int&y); intmain() { //局部变量声明 inta=100; intb=200; cout<<"交换前,a的值:"< 当上面的代码被编译和执行时,它会产生下列结果:
交换前,a的值:100
交换前,b的值:200
交换后,a的值:200
交换后,b的值:100把引用作为返回值
可以从C++函数中返回引用,就像返回其他数据类型一样。通过使用引用来替代指针,会使C++程序更容易阅读和维护。C++函数可以返回一个引用,方式与返回一个指针类似。
当函数返回一个引用时,则返回一个指向返回值的隐式指针。这样,函数就可以放在赋值语句的左边。例如,请看下面这个简单的程序:
#includeusingnamespacestd; doublevals[]={10.1,12.6,33.1,24.1,50.0}; double&setValues(inti) { returnvals[i];//返回第i个元素的引用 } //要调用上面定义函数的主函数 intmain() { cout<<"改变前的值"< 当上面的代码被编译和执行时,它会产生下列结果:
改变前的值
vals[0]=10.1
vals[1]=12.6
vals[2]=33.1
vals[3]=24.1
vals[4]=50
改变后的值
vals[0]=10.1
vals[1]=20.23
vals[2]=33.1
vals[3]=70.8
vals[4]=50当返回一个引用时,要注意被引用的对象不能超出作用域。所以返回一个对局部变量的引用是不合法的,但是,可以返回一个对静态变量的引用。
int&func(){ intq; //!returnq;//在编译时发生错误 staticintx; returnx;//安全,x在函数作用域外依然是有效的 }以上就是详解C++引用的详细内容,更多关于C++引用的资料请关注毛票票其它相关文章!