ESP-IDF:使用基本类型,指针,引用,指针的指针,指针的引用作为函数参数的几个例程

news2025/1/19 17:18:57

1.例程:

/下面是使用基本类型,指针,引用,指针的指针,指针的引用作为函数参数的几个例程/

// 值拷贝
int add10(int a)
{
a += 10;
return a;
}
// 指针传参,是一种地址拷贝
void add101(int *a)
{
// int * b = NULL;
// b = a;
// *b +=10;
*a += 10;
}
// 引用传参,也是一种地址拷贝
void add102(int &b)
{
b += 10;
}

// 指针swap
void swap01(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}

// 引用swap
void swap02(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}

// 给结构体分配空间并赋值返回
struct teacher
{
string name;
int age;
};

// 传入结构体指针的地址,然后分配空间赋值
int allocation002(teacher **te) // te指向(*te), (*te)指向结构体对象。**标识指向指针的指针。
{

teacher *p = (teacher *)malloc(sizeof(teacher));
p->age = 20;
p->name = "laia";
*te = p;
cout << "————在allocation002中使用(**te).name,(**te).age打印结构体信息—————" << endl;
cout << "teacher.name=" << (**te).name << "    teacher.age=" << (**te).age << endl << endl;
return 0;

}
// 传入结构体指针的地址,释放结构体空间,然后把指针赋值为空
void freeAllocation002(teacher **te) // te指向(*te), (*te)指向结构体对象
{
if (te == NULL)
{
return;
}
// teacher *tp = *te;
// if(tp != NULL) {
// free(tp);
// *te = NULL;
// }
if (*te != NULL)
{
free(*te); // 把(*te)指向的结构体内存空间释放掉,free()接收的是指针类型
*te = NULL;
}
}

// 传入结构体指针的引用,给结构体分配空间然后赋值
int allocation003(teacher *&te) // 使用指针的引用类型接收结构体的指针
{

te = (teacher *)malloc(sizeof(teacher)); // te是指针的引用,可以当成指针类型
te->age = 18;
te->name = "kuailaia";
return 0;

}
// 传入结构体指针的引用,释放结构体空间,然后把指针赋值为空
void freeAllocation003(teacher *&te) // 使用指针的引用类型接收结构体的指针
{
if (te != NULL)
{
free(te); // te是指针的引用,可以当成指针类型
te = NULL;
}
}

void test06()
{
int a = 10;
int b = 20;
cout << “a=” << a << endl;
a = add10(a);
cout << “调用add10(int a)后 a=” << a << endl;
add101(&a);
cout << “调用add101(int * a)后 a=” << a << endl;
add102(a);
cout << “调用add102(int & a)后 a=” << a << endl;
cout << “———————————指针swap—————————————” << endl;
cout << “swap01前 a=” << a << " b=" << b << endl;
swap01(&a, &b);
cout << “swap01后 a=” << a << " b=" << b << endl;
cout << “———————————引用swap—————————————” << endl;
cout << “swap01前 a=” << a << " b=" << b << endl;
swap02(a, b);
cout << “swap01后 a=” << a << " b=" << b << endl;

cout << "———————————给结构体分配空间并赋值返回—————————————" << endl;

teacher *p = NULL;
// allocation002(&p); //取结构体指针p的地址,然后匿名传入函数参数,当然也可以写成下面两行
teacher **pp = &p;
allocation002(pp);

cout << "———————————调用allocation002(&te)后te的值—————————————" << endl;
cout << "teacher.name=" << p->name << "    teacher.age=" << p->age << endl << endl;
freeAllocation002(&p); // 传入结构体指针的地址

teacher *te3 = NULL;
cout << "———————————调用allocation003(&te)后te的值—————————————" << endl;
allocation003(te3); // 把指针作为参数传入,allocation003()使用指针的引用类型接收结构体的指针
cout << "teacher.name=" << te3->name << "    teacher.age=" << te3->age << endl << endl;
freeAllocation003(te3);

}

extern “C” void app_main(void)
{
test06();
}

2.结果:

在这里插入图片描述

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

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

相关文章

(11)QWidget的使用(two)

目录 设置窗口图标和标题 设置窗口图标以及获取图标 设置窗口标题以及获取标题 窗口标题的特殊操作 设置窗口的状态 设置窗口的不透明度 设置窗口的状态 使用封装好的函数显示窗口 设置窗口标志 窗口标志简介 设置窗口图标和标题 设置窗口图标以及获取图标 void se…

Java在远程方法调用中运用反射机制

本案例将介绍反射机制在网络编程中的应用&#xff0c;实现如何在客户端通过远程方法调用服务器端的方法。 假定在服务器端有一个 HelloService 接口&#xff0c;该接口具有 getTime() 和 echo() 方法&#xff0c;具体代码如下&#xff1a; import java.util.Date; public int…

【C语言航路】第十一站:字符串、字符和内存函数

目录 一、字符串函数 1.strlen &#xff08;1&#xff09;strlen的库函数文档 &#xff08;2&#xff09;strlen的模拟实现 &#xff08;3&#xff09;strlen的注意事项 2.strcpy &#xff08;1&#xff09;strcpy的库函数文档 &#xff08;2&#xff09;strcpy的使用以…

如何使用机器学习进行图像识别|数据标注

什么是图像识别&#xff1f;图像识别是一种用于识别图像中的对象并将其分类为特定类别的机制&#xff0c;基于人类识别不同图像集中对象的方式。图像识别如何为人类工作&#xff1f;当我们看到一个物体或图像时&#xff0c;作为人类&#xff0c;我们能够立即准确地知道它是什么…

浅谈STL——适配器

一、适配器&#xff08;Adapters&#xff09; 它是一种设计模式&#xff0c;为STL中能够将一个类的接口转化为用户更加想要使用的接口&#xff0c;适配器就扮演者轴承、转换器的功能 就是一个wrapper的模式&#xff0c;将要修饰的接口进行二次包装&#xff0c;展露出可以更容…

紧急事故的流程管理

嵌套式职责分离 在事故处理中&#xff0c;让&#xff1a;每个人清楚自己的职责是非常重要的。有点反直觉的是&#xff0c;明嘶职费反而能够使每个人可以更独立自主地解决问题&#xff0c;因为他们不用怀疑和担心他们的同事都在干什么。 如果一个人目前要处理的事情大多了&…

[TPAMI 2022] 用深度神经网络解决欠定问题——考虑鲁棒性?

Solving Inverse Problems With Deep Neural Networks – Robustness Included?https://ieeexplore.ieee.org/abstract/document/9705105摘要在过去的五年中&#xff0c;深度学习方法已经成为解决各种反问题的最先进方法。在此类方法可以应用于安全关键领域之前&#xff0c;必…

2022年度总结和展望2023年

文章目录 前言 2022年的成就总结 2023年的行动目标 如何完成这些目标&#xff1f; 前言 从2018年更新CSDN第一篇的博文&#xff0c;我就和CSDN产生联系。当时想法很纯粹&#xff0c;就是将积累的知识写成文章&#xff0c;无论去到哪里都能查到&#xff0c;所以前面三年都是…

Python实现预测客户是否会购买房车险源码+数据集,基于伯努利朴素贝叶斯预测客户购买房车险源码,Python预测客户购买房车险

伯努利朴素贝叶斯预测客户购买房车险 根据2000年数据挑战赛保险公司的客户特征数据&#xff0c;预测客户是否会购买房车险。 使用伯努利朴素贝叶斯模型&#xff0c;我获得了更好的预测效果 完整代码下载地址&#xff1a;Python实现预测客户是否会购买房车险源码数据集 数据集…

中国化工发展的新态势

顺势而为的企业才可能有好的未来&#xff0c;在一年之初&#xff0c;回顾总结一下中国化工行业的发展态势&#xff0c;对企业认清形势&#xff0c;确定企业的行业发展方向和发展战略至关重要。 自2022年以来&#xff0c;中国快速增长的化工行业按收入计算一直是世界上最大的&am…

【Java、Redis】通过中心经纬度与半径获取范围内的结果集(类似附近的人)

文章目录需求解决方案什么是Redis GeoHashJava实现InitEquLongLatTask.javaControllerservicexml sql语句引用的pom依赖需求 通过百度地图的覆盖物功能&#xff0c;用户在页面上画圈选定某个区域&#xff0c;前端传输中心点经纬度与半径给后端&#xff0c;后端需要返回位置在圈…

表格存储 Tablestore 十年发展总结

作者&#xff1a;周赵锋 阿里云基础产品团队 ​表格存储Tablestore上线已有十年&#xff0c;随着业务规模变大&#xff0c;稳定性挑战也随之而来&#xff0c;需要不断优化架构来提升可用性。本文将为大家分享表格存储Tablestore在技术层面近年来的功能演进、技术架构演进以及稳…

与哈希函数有关的结构:布隆过滤器、一致性哈希

1、认识哈希函数 &#xff08;out f(in data)&#xff09; 输入参数in&#xff0c;其值域范围可以看作是无穷大的。输出函数out&#xff0c;其值域范围可能性很大&#xff0c;但是一定是有穷尽的哈希函数没有任何随机的机制&#xff0c;固定的输入一定是固定的输出输入无穷多但…

计算机基础——无处不网络

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.计算机网络概述 1.计算机网络发展史 二.计算机网络应用领域 三.计算机网…

基于YOLOv6m的接打电话检测识别分析系统

本身在实际项目开发应用中YOLO都是目标检测任务的绝对主力&#xff0c;从v3一直跟着到了v7&#xff0c;做了很多的项目&#xff0c;处理了很多的数据&#xff0c;当然了也积累了一些自己的成果和心得&#xff0c;这里主要是以不常用到的yolov6m系列的模型来开发构建接打电话行为…

python基础篇之函数

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a;lqj_本人的博客_CSDN博客-微信小程序,前端,vue领域博主lqj_本人擅长微信小程序,前端,vue,等方面的知识https://blog.csdn.net/lbcyllqj?spm1000.2115.3001.5343 哔哩哔哩欢迎关注&…

最简最速搭建grpc分布式服务的Mac系统开发环境

文章目录环境详情基本原理什么是 Protobuf工具安装环境搭建编写服务类的实现启动服务客户端测试环境详情 golang 1.18 macOS Big Sur protobuf 3 基本原理 整个RPC过程就是&#xff1a; 客户端 发送 数据&#xff08;以字节流的方式&#xff09;服务端接收&#xff0c;并…

Spring Boot 大型线上商城项目实战教程试学(文末视频版)

视频链接在文末 在学习一门技术的时候&#xff0c;相信很多开发者会在开源网站上寻找对应技术栈的开源项目&#xff0c;通过阅读源码&#xff0c;学习项目作者的开发思路、解决问题的方法&#xff0c;这一过程&#xff0c;对大多人来说没那么容易&#xff0c;要么一开始不知从…

共享模型之管程(八)

1.线程的活跃性 1>.定义: 线程内的有限代码因为某种原因一直无法执行完毕(/执行不完); 1.1.线程活跃性的现象-死锁 1>.有这样的情况&#xff1a;一个线程需要同时获取多把锁,这时就容易发生死锁; 2>.案例 ①.t1线程已经获得A对象锁,接下来想获取B对象的锁; ②.t2线…

Python和MySQL对比(4):用Pandas 实现MySQL的行列转换语法效果

文章目录一、前言二、语法对比数据表concat&#xff08;多列合并为一列&#xff09;group_concat&#xff08;多行合并为一行&#xff09;一列拆分为多列一行拆分为多行多行转为多列多列转为多行三、小结一、前言 环境&#xff1a; windows11 64位 Python3.9 MySQL8 pandas1.4.…