首页 > 编程语言 >C++引用

C++引用

时间:2023-10-28 15:22:26浏览次数:34  
标签:返回 变量 int double C++ 引用

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

相关文章

  • 面向对象(C++)
    -1待填坑:运算符重载,模板和泛型编程。文件输入输出跨文件使用全局变量应该先用extern声明如果在全局变量和全局函数前面加上static关键字,就无法在其他文件中使用这些变量和函数了。0、动态内存分配分配内存:int*p=newint(4);//注意是一个变量初值为4int*list=newint[......
  • C++指针
    C++指针学习C++指针既简单又有意思。通过指针可以简化一些C++编程任务的执行,还有一些任务,例如动态内存分配,没有指针是无法执行的。因此学习指针是很有必要的。每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。实例......
  • C++ 语法结构--堆
    1.堆介绍「堆heap」是一种满足特定条件的完全二叉树,主要可分为图8-1所示的两种类型。「大顶堆maxheap」:任意节点的值其子节点的值。「小顶堆minheap」:任意节点的值其子节点的值。堆作为完全二叉树的一个特例,具有以下特性。最底层节点靠左填充,其他层的节点都被填......
  • C++字符串
    C++字符串C++提供了两种类型的字符串表示形式:C风格字符串C++引入的string类类型C风格字符串C风格的字符串源于C语言,并在C++中继续得到支持。字符串实际上是使用Null字符终止的一堆字符数组。因此一个以NULL结尾的字符串,包含了组成字符串的字符。下面的声明和初始化创建了......
  • 【C++】继承 ⑪ ( 多继承 | 多继承语法 | 多继承案例 )
    文章目录一、多继承1、多继承基本语法2、多继承子类构造初始化3、多继承中访问父类成员二、多继承案例1、代码示例-简单多继承案例2、代码示例-多继承构造函数案例一、多继承1、多继承基本语法多继承概念:一个子类(派生类)可以继承多个父类(派生类);一个类......
  • C++数组
    C++数组声明数组在C++中要声明一个数组,需要指定元素的类型和元素的数量,如下所示:typearrayName[arraySize];这叫做一维数组。arraySize必须是一个大于零的整数常量,type可以为任意有效的C++数据类型。例如:doublevalance[10];初始化数组doublebalance[5]={1000.0,2.0,......
  • C++常量
    C++常量一、整数常量整数常量可以是十进制,八进制或十六进制的常量。前缀指定基数:0x或0X表示十六进制,0表示八进制,不带前缀则表示十进制。整数常量也可以带一个后缀,后缀是U和L的组合,U表示无符号整数(unsigned),L表示长整数(long),后缀可以是大写,也可以是小写,U和L的顺序任意。85......
  • C++数字及计算
    C++数字及计算C++定义数字#include<iostream>usingnamespacestd;intmain(){ //数字定义 shorts; inti; longl; floatf; doubled; //数字赋值 s=10; i=1000; l=1000000; f=230.45; d=30949.374; cout<<"shorts:"<<s<<en......
  • C++函数定义、声明及调用
    C++函数定义、声明及调用以计算两个数最大值为例,说明C++函数定义、声明及调用#include<iostream>usingnamespacestd;intmax(intnum1,intnum2);//函数声明intmain(){ inta=100;//局部变量声明 intb=200;//局部变量声明 intret; ret=max(a,b);//函数调......
  • c++恶心的char和string
    统计数字出现次数。Char的长度Strlen(char) string的长度.size()函数与.length()Char和string都可以==比较。注意stringa=”1adbcde”,而a[0]是char类型需要转换。 #include<bits/stdc++.h>#include<string>usingnamespacestd;intmain(){intn;charx;cin>>......