IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> <c++> &引用概念 | 引用用法 | 引用与指针区别 -> 正文阅读

[C++知识库]<c++> &引用概念 | 引用用法 | 引用与指针区别


前言

  • 在指针的学习中,我们了解到,cc++可以使用符号&来指示变量的地址。指针的介绍

  • c++中,&符号被赋予了另一个含义,将其用来声明引用。


什么是引用

Q:什么是引用?
A:引用是已定义的变量的别名(另一个名称)。通俗来讲,就相当于起一个外号。

Q:引用语法是什么样的?
A:语法:数据类型& 引用名 = 引用实体;

举个例子:

如果我们要将a作为b变量的别名,可以这样做:

	int a;
	int & b = a;

注意:&不是地址运算符,而是类型标识符。它是放在数据类型后面的。

案例

#include <iostream>
using namespace std;

int main(void)
{
    int a = 100;
    int & b = a;
    //输出值
    cout << a << endl;
	cout << b << endl;
	//值加一
	a++;
	//输出值
    cout << a << endl;
	cout << b << endl;
	//输出地址
	cout << &a << endl;
	cout << &b << endl;
	
    return 0;
}

运行结果:

结论: 通过观察运行结果,我们发现,ab的值和地址都完全相同,将a加一会同时影响到两个变量。


引用的特性

  • 引用必须先进行初始化
    引用不同于指针,必须要在声明引用前将其进行初始化,不能像指针一样,先声明,再赋值。
    int a = 100;
    int & b;
    b = a;	//错误!
  • 引用一旦引用了一个实体,就不能引用其他实体
    引用一但与一个实体关联起来,以后就不能进行改动了。
  • 一个变量可以有多个引用

引用的作用

引用可以用作函数参数

Q:什么是按引用传递?
A:引用经常被用作函数参数,让函数中的变量名成为调用程序中的变量的别名,这种传递参数的方法叫做按引用传递。按引用传递可以让被调用的函数访问调用函数中的变量。

案例

#include <iostream>
using namespace std;

void swap1(int &m, int &n) {
    int temp = m;
    m = n;
    n = temp;
}

void swap2(int *m,int *n) {
	int temp;
	temp = *m;
	*m = *n;
	*n = temp;
}

int main(){
    int a = 1, b = 100;
    cout<<"before: a="<<a<<", b="<<b<<endl;
    swap1(a,b);
    cout<<"after: a="<<a<<", b="<<b<<endl;
    swap2(a,b);
    cout<<"after: a="<<a<<", b="<<b<<endl;
}

在这里我们将引用变量作为函数的形参,与指针作为形参类似,直接在函数内部对输入的参数进行修改,实现了交换操作。通过对比指针交换可以发现,引用变量在使用的时候比指针要简洁一些,变量本身就代表了引用的数据,而指针则需要加上*

引用可以用作函数返回值

在讲引用作为函数返回值之前,我们先了解一下传统的函数是如何传递返回值的吧。

普通传值返回

int Add(int a, int b) {
    int c = a + b;
    return c;
}
 
int main(void)
{
    int ret = Add(1, 2);
    cout << ret << endl;
    
    return 0;
}

在这个例子里,return时会生成一个临时变量,把c的值赋给这个临时变量,再返回给ret
如果我们直接将c返回给ret,很难说返回的是3还是随机值,一切都取决于编译器了。

Q:生成的临时变量存放在什么位置呢?

  • A: 预备返回的变量小则用寄存器存储。
  • A: 变量大则创建函数栈帧的时候预先为返回值创建存储空间。

引用传值返回

int &Add(int a, int b) {
    int c = a + b;
    return c;
}
 
int main(void)
{
    int &ret1 = Add(1, 2);
    cout << ret1 << endl;
    return 0;
}

如果我们使用引用,那我们就不需要额外的临时空间和额外的操作,因为我们是通过引用直接对实体进行操作的,这可以很好的提高程序的效率。


引用与指针的区别

  • 引用是在概念上定义一个变量的别名,而指针是存储一个变量的地址。
  • 引用必须从一而终,不能再指向其他数据;指针可以随意改变指向。
  • 引用在定义时必须初始化,而指针是最好初始化,不初始化也不会报错。
  • 指针可以有多级,引用不可以。
  • 存在空指针,但是不存在空引用。
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:06:35  更:2022-11-05 00:07:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 4:49:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码