【C++】核心编程——02引用

1 引用基本使用

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

#include <iostream>
using namespace std;
int main()
{
	//引用基本语法
	//数据类型 &别名=原名
	int a = 10;
	int& b = a;
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;

	b = 20;
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
}

2 引用注意事项

  (1)引用必须初始化
  int &b;//错误
  引用在初始化后不可以改变

#include <iostream>
using namespace std;

int main()
{
	//引用注意事项
	//1.引用必须初始化
	int a = 10;
	//int& b;错误,引用必须初始化
	cout << "a=" << a << endl;
	
	//2.引用在初始化后,不可改变
	int c = 20;
	int &b = a;
	//int &b = c;引用在初始化后不可以改变
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;
}

3 引用做函数参数

  作用:函数传参时,可以利用引用的技术让形参修饰实参(形参可以修改实参)
  优点:可以简化指针修改实参
  之前函数传参:1)值传递,形参不可以修饰实参;2)地址传递,形参可以修改实参;

#include <iostream>
using namespace std;
//交换函数
//1.值传递
void swap01(int a, int b)
{
	int temp = a;
	a = b;
	b = temp;
}
//2.地址传递
void swap02(int *a, int *b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
}
//3.引用传递
void swap03(int &a, int &b)
{
	int temp = a;
	a = b;
	b = temp;
}
int main()
{

	//1.值传递
	int a = 10;
	int b = 20;
	swap01(a,b);
	cout << "值传递" << endl;
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;

	//2.地址传递
	int c = 10;
	int d = 20;
	swap02(&c, &d);
	cout << "地址传递" << endl;
	cout << "c=" << c << endl;
	cout << "d=" << d << endl;

	//3.引用传递:引用同地址一样,形参可以修饰实参
	int e = 10;
	int f = 20;
	swap03(e,f);
	cout << "引用传递" << endl;
	cout << "e=" << e << endl;
	cout << "f=" << f << endl;
}

4 引用做函数返回值

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

#include <iostream>
using namespace std;

//1.返回局部变量的引用的函数
int & test01()
{
	int a = 10;//局部变量,存放在栈区,函数结束后,编译器释放
	return a;
}

//2.函数的调用可以做左值
int& test02()
{
	static int a = 10;//创建静态变量,存放在全局区,程序结束后系统释放
	return a;
}
int main()
{
	//1.返回局部变量的引用(同返回局部变量的地址一样),第一次打印,编译器保留了数据,可以正常使用
	int& a = test01();
	cout << "a=" << a << endl;//10
	cout << "a=" << a << endl;//乱码(编译器清除了缓存)

	//1.返回局部变量的引用(同返回局部变量的地址一样),第一次打印,编译器保留了数据,可以正常使用
	int& b = test02();
	cout << "b=" << b << endl;//10
	cout << "b=" << b << endl;//10,都可以正常使用,因为是静态变量,程序结束后系统释放
}

5 引用的本质

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

#include <iostream>
using namespace std;

//发现是引用,转换为int * const ref=&a;
void func(int& ref)
{
	ref = 100;//ref是引用,转换为*ref=100
}
int main()
{
	int a = 10;

	//自动转换为 int *const ref=&a;指针常量是指针指向不可更改,也就说明了引用不可更改
	int& ref = a;
	ref = 20;
	cout << "a=" << a << endl;
	cout << "ref:" << ref << endl;
}

6 常量引用

  作用:常量引用主要用来修饰形参,防止误操作
  在函数形参列表中,可以加const修饰形参,防止形参改变实参

#include <iostream>
using namespace std;

//打印数据的函数
void showvalue(const int& val)//常量引用,防止误操作
{
	//val = 1000;不能修改数据
	cout << "value=" << val << endl;//ref是引用,转换为*ref=100
}

int main()
{
	//常量引用
	//使用场景:用来修饰形参,防止误操作
	int a = 10;
	//int& ref = 10;错误,引用必须引一块合法的内存空间
	const int& ref = 10;//加上const之后,编译器将代码修改 int temp =10;const int &ref=temp;
	//ref = 20;//加入const之后变为已读不可以修改

	//自动转换为 int *const ref=&a;指针常量是指针指向不可更改,也就说明了引用不可更改
	int b = 100;
	showvalue(b);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 C#入门 1.1 NET框架和C#语言简介 1.1.1 NET框架简介 1.1.2 认识C≠语言 1.2 Visual Studio.NET集成开发环境简介 1.2.1 VS.NET起始页 1.2.2 VS.NET集成开发环境 1.2.3 窗口布局调整 1.3 第一个控制台应用程序 1.3.1 案例说明 1.3.2 案例实现步骤 1.3.3 代码及分析 1.3.4 相关知识及注意事项 1.4 我的第一个Windows窗体应用程序 1.4.1 案例说明 1.4.2 案例实现步骤 1.4.3 代码及分析 1.4.4 相关知识及注意事项 1.5 本章小结 1.6 习题 第2章 C#语法基础 2.1 C#语言的数据类型 2.1.1 案例说明 2.1.2 代码及分析 2.1.3 相关知识及滓意事项 2.2 C#语言的运算符和表达式 2.2.1 案例说明 2.2.2 代码及分析 2.2.3 相关知识及注意事项 2.3 本章小结 2.4 习题 第3章 C#程序结构 3.1 顺序与选择结构 3.1.1 案例说明 3.1.2 代码及分析 3.1.3 相关知识及注意事项 3.2 选择结构的窗体应用 3.2.1 案例说明 3.2.2 案例实现步骤 3.2.3 代码及分析 3.2.4 相关知识及注意事项 3.3 while、do.while循环 3.3.1 案例说明 3.3.2 代码及分析 3.3.3 相关知识及注意事项 3.4 for循环 3.4.1 案例说明 3.4.2 代码及分析 3.4.3 相关知识及注意事项 3.5 本章小结 3.6 习题 第4章 方法 4.1 方法的定义与调用 4.1.1 案例说明 4.1.2 代码及分析 4.1.3 相关知识及注意事项 4.2 方法的嵌套调用 4.2.1 案例说明 4.2.2 代码及分析 4.2.3 相关知识及注意事项   …… 第5章 类与对象 第6章 数组和索引器 第7章 继承 第8章 多态 第9章 接口 第10章 异常处理 第11章 委托和事件 第12章 文件操作 第13章 课程设计 参考文献
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值