c++ 154 引用

news2024/9/22 3:48:10

在这里插入图片描述

#include<iostream>
using namespace std;
//引用作为函数参数不需要初始化
void myswap(int *a,int *b)
{
	int c = 0;
	c = *a;
	*a = *b;
	*b = c;
}
void main03()
{
	int a = 10;
	//引用语法 Type & name =var;
	int& b = a;
	b = 100;//相当于把a改成100;
	printf("b:%d\n", b);

	system("pause");
	return;
}
void main04()
{
	int x = 10;
	int y = 30;
	//a就是x的别名 b就是y的别名
	myswap(&x, &y);

	printf("x:%d,y:%d", x, y);
	system("pause");
	return;
}
//复杂数据类型做引用
struct Teacher
{
	char name[64];
	int age;

};
void printfT(Teacher* pT)
{
	cout << pT->age << endl;
}
void printfT2(Teacher &pT)
{
	cout << pT.age << endl;//注意是pT.
	pT.age = 33;
}
void printfT3(Teacher pt)//pt是元素 所以也是.
{
	cout << pt.age << endl;
	pt.age = 44;
}
void main()
{
	Teacher t1;
	t1.age = 56;
	 printfT(&t1);
	 printfT2(t1);//pT就是t1的别名
	 printf("t1.age:%d\n",t1.age);

	 printfT3(t1);//pt是形参 t1 copy一根树蕨给pT =t1 修改age的值并不会变化
	 printf("t1.age:%d\n", t1.age);
	 system("pause");
	printf("hello");
	return;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
和指针占的内存是一样的
在这里插入图片描述

//引用的意义 本质:
void modifa(int& a1)
{
	a1 = 10;
}
void modifa2(int *const a1)//指针取地址
{
	*a1 = 200;
}
int main()
{
	int a = 10;
	modifa(a);//指向这个函数调用的时候 c++取地址了
	printf("a:%d\n", a);
	int& b = a;//b很像一个常量
	modifa2(&a);//如果是指针 则需要取实参的地址
	printf("a2:%d\n", a);
	printf("b:%d\n", b);
	//printf("&a:%d\n", &a);
	//printf("&b:%d\n", &b);///a 和 b均是同一块内存的门牌号

	//char* const p;//引用是一个常量指针
	cout << "hello" << endl;
	return 0;
}
//简介赋值 1.两个变量 一个是实参一个形参 2.建立关系 实参取地址赋值给形参 3.*p形参去间接修改实参的值
void modify3(int* p)
{
	*p = 200;//3.*P
}
void main()
{
	int a = 100;//1.实参
	int* p = NULL;//形参
	p = &a;//实参取地址赋值给实参 
	*p = 39;
	modify3(&a);//2. 建立关联
	return;
}
//1.不去想编译器怎么做
//2.站在编译器角度分析是否占内存

在这里插入图片描述
值放到寄存器里 然后又拷贝给a1;
返回引用本质是编译器帮我们返回地址
在这里插入图片描述
函数调用后是个乱码
在这里插入图片描述

void main08()
{
	int a1 = getA1();
	int a2 = getA2();
	int &a3 = getA2();//若返回栈区  不能作为初始值//函数返回一个内存空间 名字叫a3 打印指针指向的内存空间的数据

	//A2 临时变量 栈上分配内存 函数运行之后就被释放掉  
	printf("a1:%d a2:%d a3:%d", a1, a2, a3);
	
	return;
}


```cpp
//函数当左值 

//返回变量的值
int g1()
{
	static int a = 10;
	a++;
	return a;
}
//返回变量本身
int &g2()
{
	static int a = 10;
	a++;
	printf("a:%d\n", a);
	return a;
}
void main()
{//=100 错误
	g2() = 100; //a=100;  11
	g2();//101
	return;
}

在这里插入图片描述
在这里插入图片描述

//指针的引用
struct Teacher1
{
	char name[64];
	int age;
};
//在被调用函数 getTeacher 获取资源
  int getTeacher(Teacher1**p)
{
	Teacher1* tmp = NULL;
	tmp = (Teacher1*)malloc(sizeof(Teacher1));
	if (tmp == NULL)
	{
		return -2;
	}
	//p是实参的地址 *实参的地址间接修改实参的值
	tmp->age = 99;
	*p = tmp;
	
}
  //c++中
  struct Teacher2
  {
	  char name[64];
	  int age;
  };
  void getTeacher2(Teacher2*& myp)
  {
	  myp = new Teacher2;
	  if (myp == NULL)
	  {
		  cout << "Memory allocation failed" << endl;
		  return;
	  }
	  myp->age = 36;
  }
  void FreeTeacher(Teacher2*pT2)
  {
	  if (pT2 == NULL)
	  {
		  return;
	  }
	  free(pT2);
  }
int main()
{
	//c语言的二级
	Teacher1* pT1 = NULL; 
	getTeacher(&pT1);
	cout << "age:" << pT1->age << endl;
	//c++的引用(指针的引用)
	Teacher2* pT2 = NULL;
	getTeacher2(pT2);
	cout << "age:" << pT1->age << endl;
	FreeTeacher(pT2);
	system("pause");
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2096349.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

素材无水印素材网站在哪下载?高清的无水印素材资源库分享

找高清无水印素材&#xff1f;蛙学网、Pixabay 等资源库全揭秘&#xff01; 创意十足的你&#xff0c;是不是常为网上素材的烦人水印而头疼&#xff1f;总在寻找高清、干净、无水印的素材资源&#xff0c;却无从下手&#xff1f;别急&#xff0c;今天就为大家推荐几个超实用的…

c++应用网络编程之八SOCKET探究

一、socket 在目前主流的网络通信中&#xff0c;SOCKET编程其实就是网络编程的代名词。在前面反复提到socket&#xff0c;那么socket到底是什么呢&#xff1f;英文的愿意是“插座、槽”的意思。这里虽然不讲解传统的网络协议但不得不简单说明一下。 首先从宏观上看&#xff0c…

《数字信号处理》学习01-离散时间信号与序列的卷积和运算

目录 一&#xff0c;信号 二&#xff0c;序列的运算 1&#xff0c;卷积和 2&#xff0c;matlab实现 相关的电子书籍请到这篇文章所在的专栏&#xff0c;并通过夸克网盘链接下载。 很多简单的知识点我就不再赘述了&#xff0c;接下来就着重记录我学习过程中遇到的较难理…

class 3: vue.js 3 计算属性

计算属性是一种Options API&#xff0c;Options API是一种通过对象定义属性、方法等框架API的方式我们知道&#xff0c;在模板中可以直接通过插值语法显示一些data属性中的数据。但是在某些情况下&#xff0c;可能需要对数据进行一些转化操作之后再显示&#xff0c;或者需要将多…

PostgreSQL技术内幕5:PostgreSQL存储引擎从磁盘到内存的读取

文章目录 0.简介1.背景知识1.1 计算机存储结构1.2 数据库常见的磁盘和内存访问形式 2. 整体获取层次3.元组介绍4. Buffer管理4.1 Buffer组成4.2 修改后落盘4.3 获取buffer页的流程 5.存储管理器&#xff08;SMGR)6.磁盘管理器&#xff08;MD)7.虚拟文件管理器&#xff08;VFD)8…

【攻防世界新手入门】simple_js

小宁发现了一个网页&#xff0c;但却一直输不对密码。&#xff08;Flag格式为 Cyberpeace{xxxxxxxxx} &#xff09; 该题来自攻防世界新手练习区的 GFSJ0480。 访问靶场&#xff0c;输入任意密码&#xff0c;弹出错误窗口并加载空页面&#xff0c;使用检查器查看对应源代码&…

zdppy+vue3+onlyoffice文档管理系统实战 20240901 上课笔记 基于验证码登录功能基本完成

遗留的问题 1、点击切换验证码2、1分钟后自动切换验证码 点击切换验证码 实现步骤&#xff1a; 1、点击事件2、调用验证码接口3、更新验证码的值 点击事件 给图片添加点击事件&#xff1a; <img :src" data:image/png;base64, captchaImg"style"widt…

ffplay源码分析(五)包缓存队列和帧缓存队列

在音视频处理流程中&#xff0c;ffplay的有两种队列&#xff0c;包缓存队列&#xff08;Packet Buffer Queue&#xff09;和帧缓存队列&#xff08;Frame Buffer Queue&#xff09;。这两个队列的存在&#xff0c;是为了适应音视频数据处理过程中的多线程架构——包括收包线程、…

win11+vscode+Flutter 开发环境配置

https://blog.csdn.net/Oven_maizi/article/details/126804404 1 vscode插件 安装 安装红框中的两个 2 flutter sdk 安装 dart sdk 包含在flutter sdk 里面&#xff0c;路径&#xff1a;flutter_windows_3.24.1-stable\flutter\bin\cache\dart-sdk 方式1&#xff1a; 通过…

[001-07-001].Redis7缓存双写一致性之更新策略探讨

1、面试题&#xff1a; 1.只要使用缓存&#xff0c;就可能会涉及到redis缓存与数据库双存储双写&#xff0c;只要是双写&#xff0c;就存在数据一致性问题&#xff0c;那么是如何解决数据一致性问题的2.双写一致性&#xff0c;你先动缓存redis还是数据库MySQL&#xff0c;哪一个…

Python爬虫案例四:爬取某个博主的所有文章保存成PDF格式

引入&#xff08;将图片保存成PDF格式&#xff09;&#xff1a; 测试链接&#xff1a; https://zq.bookan.com.cn/?tdetail&id21088&ct1&is31042341&rid4658&#xff08;图书馆图片保存PDF&#xff09;&#xff0c;前提是装库&#xff0c;pip install img2pdf…

IDEA如何将某个文件夹内的多个module合并到一个大的module内

效果&#xff1a; 初始 方法 Ctrl shift Alt S 打开 project structure 导入module 将这个大文件夹作为新的module导入 效果图 完事儿

C#上位机采用数据库操作方式对Excel或WPS表格进行读取操作

C#采用数据库操作方式对Excel或WPS表格进行读取操作 1、创建连接字符串并编写一个进行数据库操作的方法 public class OleDbHelper{//创建连接字符串private static string connString "ProviderMicrosoft.ACE.OLEDB.12.0;Data Source{0};" "Extended Propert…

如何在态势中嵌入感知?

态势感知是对事物发展的各种情况的估计、判断和理解&#xff0c;而感知是通过感官对事物的认识和了解。要在态势过程中嵌入感知过程&#xff0c;你可以考虑以下步骤&#xff1a; 1、确定态势和感知的要素&#xff1a;首先&#xff0c;明确态势和感知所涉及的关键要素。态势可能…

Lesson08---string类(1)

1. 为什么要学习string类 2. 标准库中的string类 3. string类的模拟实现 4. 扩展阅读 1. 为什么学习string类&#xff1f; 1.1 C语言中的字符串 在c语言中没有string类型只有char类型&#xff0c;char类型只能是一个字符非常的不好用&#xff0c;想要字符串还必须要弄一个c…

华溢艺术之花在社区绽放

华溢艺术之花在社区绽放 这是一个阳光明媚的周末&#xff0c;华溢艺术少儿艺术体验走进了夷陵区营盘社区碧桂园小区。这次活动不仅为社区的孩子们带来了丰富多彩的艺术体验&#xff0c;还让家长们目睹了孩子们在艺术成长道路上那些优美动人的闪光点。 活动现场&#xff0c;热闹…

线性代数|机器学习-P32循环矩阵的特征向量-傅里叶矩阵

文章目录 1. 大纲2. 循环矩阵2.1 移位矩阵P2.2 P的特征值和特征向量2.3 循环卷积矩阵2.4 循环卷积计算 3. 傅里叶矩阵 1. 大纲 循环矩阵在机器学习&#xff0c;图像处理中的应用循环卷积矩阵的特征值&#xff0c;特征向量&#xff0c;卷积规则循环卷积矩阵多项式表达&#xff…

kaggle平台free使用GPU

1、注册 请保证在【科学上网】条件下进入如下操作&#xff0c;只有在注册账户和手机号验证时需要。 step1&#xff1a;注册账户 进入kaggle官网&#xff1a;https://www.kaggle.com/&#xff0c;点击右上角【Register】进入注册页面 最好选择使用邮箱注册&#xff08;&#…

零域(微隔离)详述

一、什么是零信任微隔离&#xff1f; 微隔离的实现方式是将数据中心内部所有的业务按照特定的原则划分为数个微小的网络节点&#xff0c;根据动态策略分析对这些节点执行访问控制&#xff0c;在逻辑上将这些节点隔离开&#xff0c;限制用户横向移动&#xff0c;这就是微…

docker-compose 快速部署nacos-standalone单节点

一、nacos 介绍 官网&#xff1a; https://nacos.io/ 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台 二、如何使用docker-compose 快速部署nacos2.3.1 ⚠️ &#xff1a; nacos-standalone 部署方式 依赖于 数据库&#xff0c;请先配置好数据库实例&…