当前位置: 首页 > news >正文

C语言关于函数传参和返回值的一些想法

关于函数中使用的参数,最近我有了一些新的认识,记录下来希望对大家有所帮助。

(1) 传参的过程其实就是使用赋值运算符“=”赋值的过程,所以对于复杂的结构体,例如数组,结构体,理论上是不支持直接传参的(新的编译器已经支持结构体直接参与传参,不过不推荐,效率低)。

(2)参数实际只有一种就是输入型参数,也就是参数是用来读的,而不是写的,因为写这个参数就污染了传参的数值,是不可逆的。而且就算是写参数也无法对函数外面的变量有所影响。

(3)传参只有一次,就是函数被调用的时候,在此之后函数体内部就是对参数的值进行操作。

(4)关于输入型参数和输出型参数的概念。这2个概念都是特指指针型变量,输入型参数意思是指针变量以及指针变量指向的变量,在函数体内部是被读操作的,而没有被写操作。输出型参数意思是指针变量经过一次传参后就只会被读而不会被写(与第二条对应),但是指针变量指向的变量是作为赋值运算符的左值被写的。也就是指针变量不会变,但是指针变量指向的变量可被写,这充分体现了运算符“ -> *”这2个指针相关运算符的作用域是全局的,也就是无论在函数内部还是函数外面,还是作为全局变量都会被个指向相关运算符“ -> *”操作。

(5)返回值返回的是一个数值,这个数值是作为赋值运算符的右值操作的。而且返回值返回也可以理解为一个数值传递的过程,只传递一次。

(6)函数体内部不要对参数变量进行写操作,如果需要改变参数中的值,需要在函数体内部建立临时栈变量,然后参数作为赋值运算符“=”的右值实现读操作,建立的栈变量的一份拷贝,然后操纵这个拷贝变量。

(7)参数变量实际是定义在函数对应栈内存中的,所以函数调用结束自动释放,释放后就无意义了,这也是参数变量是只读的,无法影响函数外部的原因。

(8)参数变量以及函数内部定义的栈内存只在函数内部起作用,但是指针相关变量,由于有全局作用域所以可以影响函数外面的变量的值。

(9)指针变量相关运算符“* ->”具有全局作用域,无论存储在哪里的变量都可以访问到。这里的访问指的是既可以作为赋值运算符的左值,也可以作为赋值运算符的右值,如果与运算符“* ->”共同作用的变量是参数,这个参数是只读的,原因为以上几点。

http://www.lryc.cn/news/624723.html

相关文章:

  • 《亚矩阵云手机重构出租接单:KVM 虚拟化与边缘计算驱动的设备替代技术路径》
  • Highcharts for Flutter 正式发布
  • SQL语法大全指南
  • 【Day 29 】Linux-数据库
  • 设计模式(四)——责任链模式
  • 福彩双色球第2025095期篮球号码分析
  • 19.8 《3步实现OPT-6.7B无损量化:用自定义数据集省70%显存,精度仅跌2.3%》
  • 终极方案!lightRag/graphRag离线使用tiktoken持续报错SSLError,不改源码,彻底解决!
  • 海洋牧场邂逅海洋旅游:碰撞出新业态的璀璨火花
  • 北斗安心联车辆管理系统优势分析
  • 飞机起落架轮轴深孔中间段电解扩孔内轮廓检测 - 激光频率梳 3D 轮廓检测
  • Conda技巧:修改Conda环境目录,节省系统盘空间
  • 【每天学点‘音视频’】前向纠错 和 漏包重传
  • vue从入门到精通:搭建第一个vue项目
  • 表格内容对比及标记
  • PLC无线组网实现多台RGV搬运机器人输送系统通讯案例
  • SSM从入门到实战:1.4 Spring Bean的生命周期管理
  • 【STM32】STM32H750 CubeMX 配置 USB CDC 虚拟串口笔记
  • ThinkPHP的安装运行和调试
  • MCP协议演进:从SSE到Streamable HTTP的技术革命
  • SAP ABAP IS SUPPLIED
  • 【语法糖】什么是语法糖
  • Java+Vue构建资产设备管理系统,适配移动端与后台管理,实现全生命周期管理,涵盖采购、入库、使用、维护、报废等环节,提供完整源码,便于二次开发
  • 快速搭建项目(若依)
  • CentOS 7 LAMP快速部署WordPress指南
  • linux中的hostpath卷、nfs卷以及静态持久卷的区别
  • python+flask后端开发~项目实战 | 博客问答项目--数据库信息的基本配置与UserModel的创建,映射,关联
  • 【MySQL】超详细入门学习
  • Linux 系统(如 Ubuntu / CentOS)阿里云虚拟机(ECS)上部署 Bitnami LAMP
  • 【Python】Python Socket 网络编程详解:从基础到实践​