Parameters(in)、Parameters(out) and Parameters(inout)
0前言
参数类型(Parameters)指的是函数参数在调用时所具有的性质,从而对函数的调用方式产生影响。在 C 语言中,存在三种不同类型的函数参数:Parameters(in)、Parameters(out) 和 Parameters(inout)
1定义
Parameters(in) 表示将参数作为输入传递给函数。这意味着函数只能读取该参数的值,但不能修改它的原始值。使用 Parameters(in) 的参数通常是用来告诉函数操作的数据或状态,以便函数可以根据这些参数执行一些操作并返回结果,而不会改变这些参数的原始值。
Parameters(out) 则表示将参数作为输出传递给函数。这意味着函数可以修改该参数的原始值,并通过该参数返回函数的计算结果或状态等信息。在调用 Parameters(out) 参数的函数之前,调用方负责初始化该参数的初始值,并确保其占用的内存足够大以容纳输出数据。
Parameters(inout) 组合了 Parameters(in) 和 Parameters(out) 的特性,表示将参数同时作为输入和输出传递给函数。这意味着函数既可以读取参数的原始值,也可以修改它的值,并将结果反馈给调用者。通常情况下,使用 Parameters(inout) 的参数需要注意,在函数执行期间不能将参数设置为 NULL 或其他无效值,否则可能会导致未定义的行为。
2举例说明
INLINE void Basetimer_setMode
(BASETIMER_MODULE* timer, Basetimer_Mode mode)
在这个函数中,mode 参数是一个 Parameters(in) 参数,因为它是一个枚举类型的值,用于告诉函数设置哪种模式的定时器。该函数只需要读取 mode 参数的值来确定应将哪种模式的设置写入对应的寄存器中。在函数内部,不会修改传递给函数的 mode 参数的原始值,而只是使用该参数的值来进行适当的配置。因此,该参数的传递方式属于 Parameters(in)。
#include <stdio.h>int main() {int num;printf("Please enter an integer:\n");scanf("%d", &num);printf("The integer you entered is %d\n", num);return 0;
}
scanf() 函数的原型定义在头文件 stdio.h 中,其原型如下:
int scanf(const char *format, ...);
在这个示例程序中,定义了一个整数类型的变量 num 作为 Parameters(out) 参数。当调用 scanf() 函数时,它会将用户输入的整数存储到 num 中,并返回成功读取的数据项数目。
需要注意的是,在调用 scanf() 函数时,应该使用 & 运算符对变量地址进行传递,以便让 scanf() 函数能够修改变量的值。
在调用 Parameters(out) 函数之前,应该确保变量已经被初始化并分配了足够的内存空间,否则会导致未定义的行为。
void Espi_Hal_ChannelDynamicInitConfig(EspiChannelDynamicConfig *channelDynamicConfig)
{/* Initialize bit order, data mode, last data flag, and parity mode */channelDynamicConfig->bitOrder = espiBitOrderMSBFirst; /**< \brief Set bit order to MSB first */channelDynamicConfig->dataMode = espiMasterModeSingleShort; /**< \brief Set data mode to single transfer */channelDynamicConfig->lastData = false; /**< \brief Set last transfer flag to false */channelDynamicConfig->parityMode = espiParityModeEven; /**< \brief Set parity mode to even */
}
在这个函数中,channelDynamicConfig 是一个 Parameters(inout) 参数,因为它是一个指向 EspiChannelDynamicConfig 结构体的指针,在函数内部需要修改该参数所指向的结构体成员变量的值。在函数开始时,调用方已经初始化了 channelDynamicConfig 参数作为结构体对象的指针,并将其传递给该函数。函数在执行过程中通过该指针访问并修改结构体的成员变量,例如设置数据模式、位序等参数。由于该函数不会创建新的内存空间或释放已有的内存空间,所以该函数的参数类型是 Parameters(inout)。
3.总结
在函数参数列表中,根据函数需要使用的方式来区分这三种不同类型的参数。具体而言:
- Parameters(in): 表示该参数仅作为输入,并且只能在函数内部访问和读取,不能直接修改其值。
- Parameters(out): 表示该参数仅作为输出,并且能够在函数内部被设置或修改它的值,但在调用函数时必须确保变量已经被初始化并分配了足够的内存空间,因为函数将使用该内存空间来存储计算结果。
- Parameters(inout): 表示既可以作为输入,也可以作为输出,因此需要在函数开始时确保传递给函数的参数具有合适的初始值,并提供足够的内存空间以存储计算结果。在函数内部,可以对其进行读取和更改。
相关文章:
Parameters(in)、Parameters(out) and Parameters(inout)
0前言 参数类型(Parameters)指的是函数参数在调用时所具有的性质,从而对函数的调用方式产生影响。在 C 语言中,存在三种不同类型的函数参数:Parameters(in)、Parameters(out) 和 Parameters(inout) 1定义 Parameter…...
jstat命令查看jvm内存情况及GC内存变化
命令格式 jstat [Options] pid [interval] [count] 参数说明: Options,选项,一般使用 -gc、-gccapacity查看gc情况 pid,VM的进程号,即当前运行的java进程号 interval,间隔时间(按该时间频率自动刷新当前内存…...
java 图形化小工具Abstract Window Toolit :画笔Graphics,画布Canvas(),弹球小游戏
画笔Graphics Java中提供了Graphics类,他是一个抽象的画笔,可以在Canvas组件(画布)上绘制丰富多彩的几何图和位图。 Graphics常用的画图方法如下: drawLine(): 绘制直线drawString(): 绘制字符串drawRect(): 绘制矩形drawRoundRect(): 绘制…...
HCIA-RS实验-STP和RSTP(1)
这篇文章开始前,先简单说下这2个协议; 本文介绍了STP和RSTP的基本原理、优缺点以及应用场景。STP和RSTP都是生成树协议,主要作用于避免网络中的环路,保证数据包能够正常转发。在实际应用中,需要根据实际情况选择合适的…...
Leetcodes刷题之删除链表的倒数N个结点和删除链表的中间的结点
吾心信其可行,则移山填海之难,终有成功之日。 --孙中山 目录 🍉一.删除链表的倒数N个结点 🌻1.双指针 🍁2.求链表的长度 🌸二.删除链表的中间的结点 🍉一.删除链…...
Java-数据结构-并查集<二>
一.并查集的简单介绍 二. 并查集的主要构成和实现方式 三.HashMap模板和数组模板 由于在下文的模板基本一致,不再每次都罗列,大体的模板如下,若有错误可以在leetcode找到对应的题目解答,已经附上连接。 HashMap class UnionFi…...
JSP网上教学资源共享系统(源代码+论文)
通过网上教学资源共享系统的建设,完成了对于操作系统课程的远程化授课。可以使学生不受时间空间的限制,通过网络对于这门课程进行学习。建立起了基于B/C的网络化教学系统。本网站采用当前最流行的JSP网络编程技术,可以实现数据的高效、动态、…...
QT C++入门学习(1) QT Creator安装和使用
Qt官方下载 Qt 官网有一个专门的资源下载网站,所有的开发环境和相关工具都可以从这里下载,具体地址是:http://download.qt.io/ 进入链接后,是一个文件目录,依次进入这个路径:archive/qt/5.12/5.12.9/qt-o…...
UE动画状态机的事件触发顺序测试
正常A状态过渡到B状态的事件顺序: 整个流程为: 调用B状态的On Become Relevant事件调用B状态的On Update事件调用A状态的Left State Event事件调用B状态的Entered State Event事件调用B状态的Start Transition Event事件调用B状态的End Transition Even…...
数学建模的搜索技巧
你真的会使用“度娘”吗?是不是在查找所需要的东西的时候,搜出来的信息价值并不是很大,跟着北海老师学习,如何更高效的使用百度去查询自己想要的,有用的资料! 搜索技巧 完全匹配搜索 : 查询词的外边加上双…...
学成在线笔记+踩坑(10)——课程搜索、课程发布时同步索引库。
导航: 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线牛客面试题_java黑马笔记 目录 1 【检索模块】需求分析 1.1 全文检索介绍 1.2 业务流程 1.2.1、课程发布时索引库里新增一条记录 1.2.2、课程搜索 2 准…...
某应用虚拟化系统远程代码执行
漏洞简介 微步在线漏洞团队通过“X漏洞奖励计划”获取到瑞友天翼应用虚拟化系统远程代码执行漏洞情报(0day),攻击者可以通过该漏洞执行任意代码,导致系统被攻击与控制。瑞友天翼应用虚拟化系统是基于服务器计算架构的应用虚拟化平台,它将用户…...
solaris-Oracle11g于linux-mysql相连
Oracle11g(solaris64sparc)mysql(linux)实验 此实验目的,实现公司ebs R12 连mysql上的短信平台.预警和提示ebs中信息, 一,环境 主机名 ip 平台 数据库 dbname ebs234 192.168.1.234 …...
大厂齐出海:字节忙种草,网易爱社交
配图来自Canva可画 随着国内移动互联网红利逐渐触顶,互联网市场日趋饱和,国内各互联网企业之间的竞争便愈发激烈起来。在此背景下,广阔的海外市场就成为了腾讯、阿里、字节、京东、拼多多、百度、网易、快手、B站等互联网公司关注和争夺的重…...
几个实用的正则表达式
1到100之间的正整数正则 表达式:^[1-9]\d?$|^100$ 解释: ^表示匹配字符串开始位置 [1-9]表示数字1-9中的任意一个 \d表示任意一个数字 ?表示前面一个字符或子表达式出现0或1次 $表示匹配字符串结束位置 |表示或 最终的解释为:匹配满…...
python实战应用讲解-【numpy数组篇】常用函数(八)(附python示例代码)
目录 Python Numpy MaskedArray.cumprod()函数 Python Numpy MaskedArray.cumsum()函数 Python Numpy MaskedArray.default_fill_value()函数 Python Numpy MaskedArray.flatten()函数 Python Numpy MaskedArray.masked_equal()函数 Python Numpy MaskedArray.cumprod()函…...
Speech and Language Processing-之N-gram语言模型
正如一句老话所说,预测是困难的,尤其是预测未来。但是,如何预测一些看起来容易得多的事情,比如某人接下来要说的几句话后面可能跟着哪个单词。 希望你们大多数人都能总结出一个很可能的词是in,或者可能是over&#x…...
【AI】Python 安装时启用长路径支持
文章目录 场景:解释:关于文件长路径:计算方法: 场景: Python 安装时,会出现 Disable path length limit 的提示。 解释: 在 Windows 操作系统中,文件路径的长度是有限制的。在早期…...
深入理解Go语言中的接口编程【17】
文章目录 接口接口接口类型为什么要使用接口接口的定义实现接口的条件接口类型变量值接收者和指针接收者实现接口的区别值接收者实现接口指针接收者实现接口下面的代码是一个比较好的面试题 类型与接口的关系一个类型实现多个接口多个类型实现同一接口接口嵌套 空接口空接口的定…...
“数字中国·福启海丝”多屏互动光影艺术秀27日在福州举办
作为深化“数字海丝”的核心区、海上丝绸之路的枢纽城市,为喜迎第六届数字中国建设峰会盛大召开之际,福州市人民政府特此举办“数字中国福启海丝”多屏互动光影秀活动。本次光影秀活动是由福建省文化和旅游厅指导,福州市人民政府主办…...
联想ThinkPad声卡驱动安装避坑指南:从E470到X1 Carbon的通用解法
ThinkPad声卡驱动安装全攻略:从型号识别到疑难排解 ThinkPad作为商务笔记本的代表,其稳定性和兼容性一直备受推崇。但即便是这样成熟的产品线,声卡驱动问题依然困扰着不少用户——从经典的E470到高端的X1 Carbon,不同机型可能面临…...
用ProcessOn复刻《纳瓦尔宝典》思维导图:我是如何把一本投资哲学书变成可执行行动清单的
用ProcessOn将《纳瓦尔宝典》转化为可执行行动指南:从思维导图到每日实践的完整方法论 当合上这本被硅谷创投圈奉为"现代智慧集"的书籍时,很多人会陷入相似的困境——那些关于财富杠杆、幸福习惯的洞见在脑海中闪烁,却不知如何嵌入…...
LxgwWenkaiGB:合规开源字体的专业应用指南
LxgwWenkaiGB:合规开源字体的专业应用指南 【免费下载链接】LxgwWenkaiGB An open-source Simplified Chinese font derived from Klee One. 项目地址: https://gitcode.com/gh_mirrors/lx/LxgwWenkaiGB LxgwWenkaiGB(霞鹜文楷 GB)作为…...
ai辅助开发:告诉快马你的想法,自动生成jdk17最佳实践代码
今天想和大家分享一个特别实用的开发技巧——如何用AI辅助快速掌握JDK17的新特性。作为一个经常需要升级Java版本的开发者,我发现每次版本更新都要花大量时间学习新语法,直到遇到了InsCode(快马)平台的AI辅助功能。 传统开发方式的痛点 以前用JDK8写代码…...
translategemma-27b-it入门必看:Gemma3轻量化设计如何平衡精度与推理速度
translategemma-27b-it入门必看:Gemma3轻量化设计如何平衡精度与推理速度 本文深度解析基于Gemma 3构建的TranslateGemma-27B-IT模型,通过实际部署演示展示其如何在保持翻译精度的同时实现高效推理,为开发者提供完整的入门指南。 1. 认识Tran…...
ROS2新手必看:用turtlesim小乌龟快速入门机器人仿真(附完整安装指南)
ROS2实战入门:从turtlesim小乌龟探索机器人仿真世界 引言:为什么选择turtlesim作为ROS2的起点? 在机器人操作系统(ROS)的学习道路上,很多开发者都会遇到一个共同的困境:理论概念抽象难懂,而直接上手复杂项…...
炸穿 2026 技术圈!AI Agent 从 0 到 1 商业落地全攻略,附 Python 可跑源码 + 双场景变现
引言:“AI Agent:程序员效率革命的最后一公里”前言:还在死磕 CRUD、熬夜改 BUG、被重复研发工作榨干精力?2026 年的技术风口早已彻底转向 ——AI Agent,从华为虚拟工程师、蘑菇物联工业智能体,到全行业自动化落地&…...
同架构大数据量HGDB到HGDB数据迁移
文章目录环境文档用途详细信息环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7,银河麒麟 (X86_64) 版本:4.5.8 文档用途 本文介绍同架构大数据量情况下,为了减少停机时间,先搭建流复制同步数据&…...
VSCode配置STM32标准库开发环境:手把手解决core_cm3.c编译报错与头文件路径问题
VSCode搭建STM32开发环境:解决标准库兼容性与智能感知难题 当开发者从Keil或IAR转向VSCode时,往往会遇到两个棘手的拦路虎:标准库与GCC的兼容性问题,以及代码智能感知的缺失。本文将深入解决这两个核心痛点,带你构建一…...
OpenClaw自动化周报生成:Qwen3-32B私有镜像精准提取Git提交记录
OpenClaw自动化周报生成:Qwen3-32B私有镜像精准提取Git提交记录 1. 为什么需要自动化周报生成 每周五下午,我都会面临同样的困扰:需要从零散的Git提交记录中手动整理本周工作内容,再拼凑成一份结构化的周报。这个过程不仅耗时&a…...
