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++中的引用处理

目录

1.引用的基本用法

1.1 引用的实质

1.2 引用的用法

?2.函数中的引用

3.引用的本质

4.指针的引用

5.常量引用


?

1.引用的基本用法

引用是C++对C的重要扩充。在c/c++中,指针用法基本一致。但是C++增加了另一种给函数传递地址的途径,这就是引用传递,也存在去其他语言,并不会是C++独有。

1.1 引用的实质

原类型 &别名 = 旧名

1.2 引用的用法

注意事项:

引用一旦初始化,不能更改引用的指向

引用定义时必须初始化 不能引用NULL

引用可以引用任意类型包括数组

&在等号的左边是引用,在等号的右边是取地址

?代码

#include <iostream>
using namespace std;
void test01()
{
	int a = 10;
	int& b = a;
	b = 100;
	cout << a << endl;

	int c = 1;
	//b = c; 代表把c的值赋值给b 不是给c取别名为b
	//int &d; 引用定义时必须初始化


}
 void test02()
 {
	int a[5] = { 1,2,3,4,5 };//int(&arr)[5] = a;
	 typedef int ARR[5];  //type & 别名 = 旧名
	 ARR & arr = a;
	 for (int i = 0; i < 5; i++)
	 {
		 cout << arr[i] << " ";
		
	  }
	 cout << endl;
	
 }
 int main()
{
	 test02();
	
	 return 0;
}

?2.函数中的引用

引用可以作为函数的形参 ,不能返回局部变量的引用

在C语言中我们记得我们可以用指针解决函数不能交换值的问题。

swap(int *x ,int *y)
{
	int temp = *x;
	*x = *y;
	*y = temp;
}

void test01()
{
	int a = 10;
	int b = 20;
	swap(&a,&b);
 
} 

?

在C++中可以也使用引用很好的解决这个问题

void swap_ref(int &x, int &y)// int &x =a, int &y =b
 {
   int tmp = x;
   x = y;
   y = tmp;

 }
 void test01_ref()
 {
   int a = 10; 
   int b = 20;
   swap_ref(a, b);
 }

?

如果想开辟数组地址,用指针的做法是

//形参是指针 引用
void get_mem(int **q)
{
  *q = (int *)malloc(5 * sizeof(int));
}
void test03()
{
  int *p = NULL;
  get_mem(&p);
  get_mem_ref(p);
}

?

用引用可以这样做

void get_mem_ref(int * &q)//int * (&q) = p
{
    q = (int *)malloc(5 * sizeof(int));

}
void test03()
{
  int *p = NULL;
  get_mem(&p);
  get_mem_ref(p);
}

?

能不能返回一个变量的引用 看这个变量的空间是否被释放了

int & test04()
{
   //能不能返回一个变量的引用 看这个变量的空间是否被释放了
   static int b = 100;
   int a = 10;
   //return a;//err 不能返回局部变量的引用
   return b;//可以返回静态的变量的引用

 }

3.引用的本质

引用的本质是一个指针常量

type &b = a; 编译器底层这么实现的: type *const b = &a

比如你写

int &b = a;? // 编译器优化为?int * const b = &a?

?

4.指针的引用

套用引用公式: type &q = p

如果想改变p的内容,函数传递的时候按照指针的方法传的是地址,如下:? get_mem(&p);

如果你想用引用的方法直接传就行

void test03()
{
? int *p = NULL;
? get_mem(&p);
? get_mem_ref(p);
}

5.常量引用

const type &p = q;

常量引用代表不能通过引用去修改引用标识的那块空间

?

int a = 10;?

const int &b = a;

如果你再去? 让 b = 1000;就是错误的?

虽然不能引用常量,但是可以加const来引用

int &b = 100; //不能引用常量

改为

const int &b = 1;

原理上是 等价于,相当于让tmp? = 1

int tmp =1 ,const int &b= tmp;

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

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