【C++课程学习】:C++入门(引用)

🎁个人主页:我们的五年

🔍系列专栏:C++课程学习

🎉欢迎大家点赞👍评论📝收藏⭐文章

目录

🍩1.引用的概念:

🍩2.引用和指针是两个概念:

🍩3.权限问题:

🍩4.引用的使用场景:

🌽1.做参数:

🌽2.做返回值:

🍩5.传值和传引用的区别:


🍩1.引用的概念:

引用是已经存在的取了一个别名,没有去新开辟新的空间,没有定义一个新的变量。它和引用的变量共用一块空间。

引用的结构:

类型& 引用变量名(对象名)=引用实体。

🍩2.引用和指针是两个概念:

引用是一个变量的别名,指针存储的是一个变量的地址。

1.引用不需要开辟新的空间(但是底层逻辑是需要的);指针要开辟新的空间存放地址(32位下是4个字节,64位下是8个字节)。

2.引用必须初始化;但是指针可以不初始化。

3.引用不能指向NULL;但是指针可以指向NULL。


4.引用+1,就是引用实体+1;指针+1是往后偏移一个类型的大小。

复制代码
#include<iostream>
using namespace std;

int main()
{
	int a = 10;
	int& b = a;
	int* c = &a;
	//引用和指针+1的区别
	cout << "b="<<b << endl;
	cout << "b+1="<<b + 1 << endl;
	cout << "c="<<c << endl;
	cout << "c="<<c + 1 << endl;
}

5.sizeof的不同,sizeof引用是类型的大小;sizeof指针就是是指针的大小,32位平台是4个字节,64位平台是8个字节,所以一直用这么大的空间去存储变量的地址。

复制代码
#include<iostream>
using namespace std;

int main()
{
	//引用和指针sizeof的区别
	cout << "sizeof(char&)=" << sizeof(char&) << endl;
	cout << "sizeof(int&)=" << sizeof(int&) << endl;
	cout << "64位平台:sizeof(int*)=" << sizeof(int*) << endl;
}

6.有多级指针,但是没有多级引用(现在目前知识水平是觉得没有必要)。

7.引用实体以后就不能再去引用其他实体。

8.引用比指针更安全。因为指针访问实体需要进行解引用操作,但是引用访问实体是编译器自己操作。

9.访问实体的方式不同。指针需要显示解引用,但是引用是编译器自己处理。

🍩3.权限问题:

权限只能平移或者缩小,不能放大。

const只有可读权限,没有const就是可读可写的权限。允许const到const(权限平移),允许int到const int(权限缩小)。

但是不能从const int到int(权限放大)。

复制代码
#include<iostream>
using namespace std;

int main()
{
	const int a = 10;

	//权限平移
	const int& b = a;

	//权限放大,错误
	//int& c = a;

	//权限缩小
	int x = 10;
	const int& y = x;
}

🍩4.引用的使用场景:

🌽1.做参数:

做函数的参数,因为是实体的别名,所以直接可以改变实体。

作返回值的时候,一定要注意出了函数以后,变量还在。

复制代码
#include<iostream>
using namespace std;

//做参数
void Add(int& a, int& b){
	a++;
	b++;
}

int main()
{
	int a = 1, b = 2;
	Add(a, b);
	cout << "a=" << a << endl;
	cout<< " b=" << b << endl;
	return 0;
}

🌽2.做返回值:

复制代码
#include<iostream>
using namespace std;

//做参数
int& func() {
	static int a = 10;
	cout << &a << endl;
	return a;
}

int main()
{
	int& a = func();
	cout << &a << endl;
	return 0;
}

🍩5.传值和传引用的区别:

以值作为参数或者返回类型,不会传变量本身,而是传实参的一份临时拷贝。所以传值的效率是十分低下尤其是传参的个数多,次数多的时候。

复制代码
#include<iostream>
#include<time.h>
using namespace std;

void func1(int a) {

}
void func2(int& a) {

}
int main()
{
	int a = 10;
	size_t begin1 = clock();
	for (int i = 0; i < 100000; i++)
		func1(a);
	size_t end1 = clock();
	size_t begin2 = clock();
	for (int i = 0; i < 100000; i++)
		func2(a);
	size_t end2 = clock();
	cout << end1 - begin1 << endl << end2 - begin2 << endl;
}

0表示小于1ms,并不是没有时间。

相关推荐
库玛西1 小时前
深入浅出传输层:UDP 与 TCP 协议全景指南
linux·服务器·网络·c++·笔记·tcp/ip·udp
Chester_19997 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
EXI-小洲8 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
会周易的程序员9 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导9 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan9 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
小灰灰搞电子9 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
QT界面美化性能优化9 小时前
QT+AI:使用AI技术为QT应用程序赋能
c++·人工智能·qt·opencv·qt教程·qt6.3
m0_695251499 小时前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt
是隼人10 小时前
buuctf-pwn xdctf2015_pwn200题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门