首页 > 编程语言 >C++第七次课笔记——引用

C++第七次课笔记——引用

时间:2024-07-27 19:54:32浏览次数:19  
标签:10 temp int 笔记 引用 第七次 实参 ref C++

引用

作用:给变量取别名
语法:数据类型 &别名 = 原名

int main(){
	//引用基本语法
	int a = 10;
	int &b = a;
	//
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	b = 100;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
}

结果

a = 10
b = 10
a = 100
b = 100

引用的注意事项

1、引用必须要初始化
int &b; //错误的
2、引用一旦初始化后,不可以更改

引用做函数参数

作用:函数传参时,可以利用引用的技术让形参修饰实参
优点:简化指针修改实参

//交换函数
//1、值传递
void mySwap01(int a, int b){
	int temp = a;
	a = b;
	b = temp;
}
//2、地址传递
void mySwap02(int *a, int *b){
	int temp = *a;
	*a = *b;
	*b = temp;
}
//3、引用传递
void mySwap03(int &a, int &b){
	int temp = a;
	a = b;
	b = temp;
}
int main(){
	int a = 10;
	int b = 20; 
	mySwap01(a, b); // 值传递,形参不会修饰实参
	mySwap02(&a, &b); //地址传递,形参会修饰实参
	mySwap03(a, b);//引用传递,形参会修饰实参
	//自行输出结果对比
	return 0;
}

引用做函数返回值

引用是可以做函数的返回值存在的
注意:
1、不要返回局部变量的引用
2、函数的调用可以作为左值

int& test01(){
	int a = 10;
	return a;
}
int& test02(){
	static int a = 10;//静态变量,存放在全局区,全局区上的数据在程序结束后系统释放
	return a;
}
int main(){
	//int &ref = test01();
	//cout << "ref = "<< ref << endl; //第一次结果正确,是因为编译器做了保留
	//cout << "ref = "<< ref << endl; //第二次结果错误,因为a的内存已经释放
	
	int &ref2 = test02();
	cout << "ref2 = "<< ref2 << endl; 
	cout << "ref2 = "<< ref2 << endl; 
	
	test02() = 1000;//如果函数的返回值是引用,函数调用可以作为左值
	cout << "ref2 = "<< ref2 << endl; 
	cout << "ref2 = "<< ref2 << endl; 
}

结果是

ref2 = 10
ref2 = 10
ref2 = 1000
ref2 = 1000

引用的本质

引用的本质在C++内部实现是一个指针常量

void func(int& ref){
	ref =100; //ref是引用,转换为*ref = 100
}
int main(){
	int a = 10;
	
	//自动转换为int* const ref = &a; 指针常量是指针指向不可改,也说明为什么引用不可更改
	int& ref = a;
	ref =20;//内部发现ref是引用,自动转换为 *ref = 20;
	cout << "a:" << a << endl;
	cout << "ref:" << ref << endl;
	
	func(a);
	return 0;
}

常量引用

作用:常量引用主要用来修饰形参,防止误操作

void showValue(const int &val){
	//val = 1000; //val 不可修改了,一旦修改就是误操作
	//形参不会改变外部的实参了
	cout << "val = " << val << endl;
}
int main(){
	int a = 10;
	showValue(a);
	cout << "a = " << a << endl;
}

标签:10,temp,int,笔记,引用,第七次,实参,ref,C++
From: https://blog.csdn.net/LqianH6/article/details/140531793

相关文章

  • C++第十一次课笔记——初始化列表算法、对象成员、静态成员
    一、初始化列表作用:C++提供初始化列表语法,用来初始化属性语法:构造函数():属性1(值1),属性2(值2),…{}classPerson{public: //传统的初始化操作 Person(inta,intb,intc){ m_A=a; m_B=b; m_C=c; } //初始化列表初始化属性 Person(inta,intb,int......
  • Qt+OpenCascade开发笔记(一):occ的windows开发环境搭建(一):OpenCascade介绍、下载和安装过
    若该文为原创文章,转载请注明原文出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140604141长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…Qt开发专栏:三方......
  • C++ 虚拟加载程序
    哦!J B K!我来啦!!!目录代码效果总代码  新知识生化危机  结尾代码上代码!(上次是这样吗?)voidHideCursor()//影藏光标{ CONSOLE_CURSOR_INFOcursor_info={1,0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);}还有!!! —————......
  • c++11 新特性 超级详细
    目录C++auto类型推导完全攻略auto类型推导的语法和规则auto的限制auto的应用使用auto定义迭代器auto用于泛型编程C++decltype类型推导完全攻略decltype推导规则decltype的实际应用汇总auto和decltype的区别语法格式的区别对cv限定符的处理对引用的处......
  • C++输入输出流
    目录入门     C++cout.put():输出单个字符C++cout.write():输出字符串C++cout.tellp()和cout.seekp()方法详解 C++tellp()成员方法C++seekp()成员方法 C++cout格式化输出(超级详细)C++cout成员方法格式化输出使用流操纵算子格式化输出C++怎样对输入输出......
  • 收藏多年的线程安全问题大全笔记(1),笔记一生一起走,那些日子不再有
    本篇会加入个人的所谓鱼式疯言❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......
  • C++ 红黑树
    1. 红黑树的概念红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。红黑树的性质......
  • 【学习笔记】线段树
    本文Markdown源代码冲刺\(3000\)行中,目前行数:\(2678\)行。【0】线段树简介【0.1】线段树是干什么的线段树是一种基于分治的树形数据结构,可以处理很多区间问题,值域问题。【0.2】线段树的形态线段树作为一棵二叉树,其左子节点维护的是左半区间的信息,右子节点维护的是右半区......
  • c++ typedef 关键字详解
    在C++中,typedef关键字用于为已有的数据类型创建一个新的别名。这使得代码更加易读和维护,尤其是当使用复杂的类型定义时。typedef可以用来简化代码或使其更具描述性。基本语法typedefexisting_typenew_name;这里,existing_type是已有的类型,new_name是你为它创建......
  • 计组笔记第七章——输入输出系统
    7.1.1I/O系统和IO控制方式常见I/O设备:鼠标、键盘;显示器、打印机;硬盘、光盘。主机如何与I/0设备进行交互?I/O接口:又称I/O控制器、设备控制器,负责协调主机与外部设备之间的数据传输。I/O接口与CPU之间靠总线连接,与外设之间靠USB连接线连接。I/O接口多种多样,也会指定相应的标......