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++ 引用

前面说了内存四区和new操作符,现在来讲下引用

1.给一个简单的定义? ?引用就是给变量取别名

int a? =100;

int &b= a;

a? 和 b? ?是同一块内存

引用要注意两个问题

1.引用必须初始化

2.引用不能更

?下面是测试代码:

#include <iostream>
using namespace std;

int main()
{
	int a = 100;
	int& b = a;  //引用必须初始化
	cout << "a=" << a << "  b=" << b << endl;
	int c = 200;
	//int& b = c;//错误,引用不可以更改
	b = c;//这不是更改引用,而是给变量b赋值
	cout << "a=" << a << "  b=" << b <<" c=" <<c<< endl;
}

运行结果:

?2.引用作函数参数和函数返回值

之前大家应该都学过? ?交换两个变量值的方法

变量值改变的意义并不是值本身的问题,而是地址的问题

所以

swap(int *a,int *b)能够交换主函数传入两个变量的值

swap? (int a,int b)不能交换,因为传进来的是两个值本身,swap函数中局部变量a,b的值会被修改,但是主函数中的则不会

了解了引用? ?可以用第三种方法? ? 引用传递

swap(int& a,int& b)? 因为是取别名,当然也是可以为本身的? ?相当于int& a=a;所以主函数中的a与swap函数里面的a,主函数中的b与swap函数里面的b共用同一块内存,swap中a与b的值交换了

当然主函数中的a? b也交换了

代码里面就不重名了,重名是可以的大家可以去试试

void swap(int& a, int& b)
{
	int temp = a;
	a = b;
	b = temp;
}


int main()
{
    int x=100;
    int y=200;
    swap(x,y);
    cout<<x<<" "<<y<<endl;
}

200 ?100

?引用是可以做函数返回值的

1.不要返回局部变量

2.函数调用可以作左值

之前讲过,局部变量是在栈区的? 会在函数结束后释放

所以返回局部变量用其他变量接受的时候,第一次可能会被编译器保留,但是之后就会被随机重置,就不试了,大家可以去试试

第二

函数调用是可以作左值的

?下面代码段输出为100000

#include <iostream>
using namespace std;
int& test()
{
	int a = 100;
	return a;
}
int main()
{
	int& b = test();//返回的是引用,用引用接收
	test() = 1000000;
	cout << b<< endl;
}

3.引用的本质和常量引用

引用的本质:

? ? ? ? 我们可以把引用看作是取别名,但是在C++中,引用是有更深一步的操作的

? ? ? ? 引用的本质的? 指针常量

? ? ? ? 指针常量和常量指针相信大家都明白

? ? ? ? 指针常量是指针的指向不可变? 指向空间的值可以被修改? ?如 int *const? b=&a;

? ? ? ? 常量指针指针的指向可以改变? 但是指向的空间的值不可以修改 如 int const *b=&a;

? ? ? ? 这里我们就可以解释开篇提出要注意的两个问题了

1.引用必须初始化? ? ?指针必须初始化,不然就是个野指针,是很危险的

2.引用不能更? ? ? ? ? ? int *const? b=&a;? 指针常量的指向是不可以变的

int? &b=a? -----------? int *constb=&a

b=100;? ? -------------*b=100;

这是引用的实质,我们用的时候不需要去管这些,只需要知道用法就行

?最后? 一个? 常量引用

这个的应用场景主要是作函数参数,防止形参被修改

比如说我我们只想打印传入变量的值 但不修改?

#include <iostream>
using namespace std;

void  printnum( const int & num)
{
	cout << num << endl;
}
int main()
{
    int  a=10;
	printnum(a);
}

如果我们直接int &num? 那么我们修改num的值则会改变a;

加上const? 变为只读 不能修改? 从而防止误操作

分享到这里 谢谢大家

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 18:45:50  更:2022-08-19 18:50:09 
 
开发: 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/13 0:49:26-

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