C++引用
引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字,一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。
- C++引用vs指针
引用很容易与指针混淆,它们之间有三个主要区别:- 不存在空引用,引用必须连接到一块合法的内存
- 一旦引用被初始化为一个对象,就不能被指向到另一个对象,指针可以在任何时候指向到另一个对象
- 引用必须在创建时被初始化。指针可以在任何时候被初始化。
- C++中创建引用
试想变量名称是变量附属在内存位置中的标签,可以把引用当初是变量附属在内存位置中的第二个标签。因此,可以通过原始变量名称或引用来访问变量的内容:例如:
int i = 17;
double d = 23.5;
可以为d和i声明引用变量,如下:
int& r= i;
double& s=d;
在这些声明中,&
读作引用。因此,第一个声明可以读作是r是一个初始化为i的整型引用
实例:
#include <iostream>
using namespace std;
int main(){
int i;//声明变量
double d;
int& r = i;//声明引用变量
double &s= d;
i = 5;
cout<<"Value of i:"<<i<<endl;
cout<<"Value of i reference:"<<r<<endl;
d = 11.7;
cout<<"Value of d:"<<d<<endl;
cout<<"Value of d reference:"<<s<<endl;
return 0;
}
结果显示:
引用通常用于函数参数列表和函数返回值,下面列出了两个与C++引用相关的重要概念。
概念 | 描述 |
---|---|
把引用作为参数 | C++支持把引用作为参数传给函数,这比传一般的参数更安全 |
把引用作为返回值 | 可以从C++函数汇总返回引用,就像返回其他数据类型一样 |
C++把引用作为参数
使用引用来实现引用调用函数。
实例:
#include<iostream>
using namespace std;
void swap(int &x, int &y);//函数声明
int main(){
//局部变量声明
int a = 100;
int b = 200;
cout<<"before exchange, the value a:"<<a<<endl;
cout<<"before exchange, the value b:"<<b<<endl;
swap(a, b);
cout<<"after exchange, the value a:"<<a<<endl;
cout<<"after exchange, the value b:"<<b<<endl;
return 0;
}
void swap(int &x, int& y){
int temp;
temp = x;
x = y;
y = temp;
return ;
}
C++把引用作为返回值
通过使用引用替代指针,会使用C++程序更容易阅读和维护。C++函数可以返回一个引用,方式与返回一个指针类似。当函数返回一个引用时,则返回一个指向返回值的隐式指针。这样,函数就可以放在赋值语句的左边。
实例:
#include<iostream>
#include<ctime>
using namespace std;
double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0};
double& setValues(int i){
return vals[i];//返回第i个元素的引用
}
int main(){
cout<<"before change:"<<endl;
for(int i = 0; i<5; i++){
cout<<"vals["<<i<<"]=";
cout<< vals[i]<<endl;
}
setValues(1) = 20.3;
setValues(2) = 70.8;
cout<<"after change:"<<endl;
for(int i= 0;i<5;i++){
cout<<"vals["<<i<<"]=";
cout<<vals[i]<<endl;
}
return 0;
}
结果显示:
当返回一个引用时,要注意被引用的对象不能超出作用域。所以返回一个对局部变量的引用是不合法的,但是,可以返回一个对静态变量的引用。
int& func(){
int q;
//return q; //在编译时发生错误
static int x;
return x;//安全,x在函数作用域外依然是有效的
}
标签:返回,变量,int,double,C++,引用
From: https://www.cnblogs.com/bonne-chance/p/17794109.html