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.总结

在函数参数列表中,根据函数需要使用的方式来区分这三种不同类型的参数。具体而言:

  1. Parameters(in): 表示该参数仅作为输入,并且只能在函数内部访问和读取,不能直接修改其值。
  2. Parameters(out): 表示该参数仅作为输出,并且能够在函数内部被设置或修改它的值,但在调用函数时必须确保变量已经被初始化并分配了足够的内存空间,因为函数将使用该内存空间来存储计算结果。
  3. Parameters(inout): 表示既可以作为输入,也可以作为输出,因此需要在函数开始时确保传递给函数的参数具有合适的初始值,并提供足够的内存空间以存储计算结果。在函数内部,可以对其进行读取和更改。

Parameters(in)、Parameters(out) and Parameters(inout)相关推荐

  1. FastAPI 5 - 常用请求及 postman、curl 使用(parameters,x-www-form-urlencoded, raw)

    文章目录 get parameters body - form-data x-www-form-urlencoded raw 本文适合对web请求不够熟悉的后端新手. 有些概念不太清楚,但动手做起来先 ...

  2. ES 设置支持/禁用排序、聚合的mapping parameters

    doc_values doc_values参数是为了加快排序.聚合操作,在建立倒排索引的时候,额外增加一个列式存储映射,是一种空间换时间的做法.默认是开启的,大多数字段在索引时都会生成doc_valu ...

  3. java parameters用法_(四)Parameters,简单参数就用这个

    Parameters注解在测试方法上指定参数列表,然后在测试方法中声明对应的形参,形参与参数列表一一对应,但名字可以不同,如下所示: public class Test1 { @Parameters( ...

  4. SAP应用界面开发:SELECT-OPTIONS对象、PARAMETERS 对象

    1.SELECT-OPTIONS基本语法及定义 SELECT-OPTIONS通常用于参照一数据库字段来建立数据输入域,其定义对象命名长度不能超过8位,其产生的屏幕对象最大输入长度为18位,语法如下: ...

  5. 02、射频中Г、S Parameters、RL、IL、Gain、VSWR、NF、P1dB、HMD、IMD、ACPR、IIP3、OIP3、DRSF、PAE等指标计算及其重点公式总结

    1.Г(reflect coefficient) 2.S Parameters 3.RL(Return loss) 回波损耗,损耗回波 4.IL(Insertion Loss)  插入损耗,损耗插入 ...

  6. 神经网络学习小记录72——Parameters参数量、FLOPs浮点运算次数、FPS每秒传输帧数等计算量衡量指标解析

    神经网络学习小记录72--Parameters参数量.FLOPs浮点运算次数.FPS每秒传输帧数等计算量衡量指标解析 学习前言 网络的运算时组成 我们要关注网络的什么指标 1.Parameters参数 ...

  7. SqlCommand.Parameters的使用

     在c#中执行sql语句时,避免会遇到传参的问题.Parameters就是用来做参数化查询,不然很容易被黑客拿到数据. 一.简介 引用自:https://msdn.microsoft.com/ZH-C ...

  8. ASP.NET会员注册登录模块(MD5加密,Parameters防止SQL注入,判断是否注册)

    MD5加密,Parameters防止SQL注入: protected void btnLog_Click(object sender, EventArgs e)     {         //获取验 ...

  9. Allegro如何复用软件设置参数Parameters

    一. 复用Parameters有什么作用 Allegro中一些默认设置很不尽如人意,所以在绘制新PCB时,经常需要对颜色,字号等参数进行重新设置,相当花费时间.但其实,可以通过导入导出软件设计参数Pa ...

最新文章

  1. 收藏 | 深度学习中神经网络的可视化解释!
  2. 语言与golang语言运行速度_Golang语言情怀第3期 Go 语言数据类型
  3. latex 引用_VS Code + LaTex + Zotero 写作毕业论文
  4. sublime text2如何连接FTP/SFTP——图文详细教程
  5. Java并发编程(05):悲观锁和乐观锁机制
  6. 大数据之-Hadoop本地模式_执行Grep官方案例---大数据之hadoop工作笔记0021
  7. unity算法面试_Unity面试准备
  8. 数据库变为可疑_数据库出现可疑解决办法
  9. Vue.js菜鸟教程自学(一)
  10. Scrum 敏捷开发 笔记
  11. 004@ kernel 的配置和编译总结 分析2
  12. 2022中国老博会/老龄用品展/智慧养老展/北京老年产业展
  13. 音视频开发系列-H264编码原理
  14. 在Mac中开发STM32单片机
  15. opencv3/C++ 积分图像
  16. 饿了么技术往事(下)
  17. vue 引入图片出现错误 Cannot find module ‘./XXX.jpg‘e
  18. Ubuntu 18.04下搜狗拼音输入法选词面板乱码问题(通过更换输入法版本完美解决,一劳永逸)
  19. 嵌入式c语言小学期实验报告,小学期单片机实验报告
  20. 安费诺amphenol连接器_全球连接器供应商前50官网网址

热门文章

  1. 百度语音合成模型Deep Voice3
  2. 学习笔记与练习 | SQL入门(三)| 复杂一点的查询
  3. adobe PR2022 没有开放式字幕怎么办?
  4. Ubuntu 安装 libvirt
  5. 切片器可以设置日期格式?_用Excel切片器为你的数据报告增加交互功能,很简单!...
  6. BACnet IP通讯方式组网步骤
  7. 按理说机械硬盘和固态硬盘使用得当寿命几乎一样长,但为什么网上传言机械硬盘更容易坏?
  8. 海思hi3516dv300音频调节总结
  9. 使用MATLAB的residue()命令求传递函数的展开式
  10. 【Kafka】生产者