问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

为什么C语言的子函数不直接用型参参与运算,而是另外声明个局部变量,形参再赋值给这个局部变量?

发布网友 发布时间:2022-05-07 13:10

我来回答

2个回答

热心网友 时间:2023-11-01 03:02

函数的副作用是最令人头疼的问题
我们都知道形参使得函数可以改变调用者的变量值
所以很容易产生副作用
所以函数设计时应当避免频繁改变形参的值
这就是你所看到的现象:“不直接用型参参与运算”
这样就不会改变调用者的变量值
当然最后还是要改变形参的值,否则形参就没有意义了
还有另一个原因是编译有关的
局部变量是在栈分配空间的
生成的机器代码是近调用的短地址
而形参就很难说了
可能有的编译器,先按值参处理,最后再用结果修改形参
这样做就不用担心“直接用型参参与运算”的会频繁修改形参了
但是却不符合形参的本义
因此编译器会直接引用形参的地址,就会生成远调用的长地址了
把形参编译成长短不同的地址,这在调用系统功能时就有讲究了
你的代码里有“interrupt”字样,我没猜错的话就是中断调用
这时需要长地址还是短地址,那可是一点也不可弄错了
用局部变量就会得到短地址

热心网友 时间:2023-11-01 03:03

你注意到cur_pin是不同的类型了吗?正是因为需要转换类型所以才引入它 形参可以参与运算,都居于栈空间

热心网友 时间:2023-11-01 03:02

函数的副作用是最令人头疼的问题
我们都知道形参使得函数可以改变调用者的变量值
所以很容易产生副作用
所以函数设计时应当避免频繁改变形参的值
这就是你所看到的现象:“不直接用型参参与运算”
这样就不会改变调用者的变量值
当然最后还是要改变形参的值,否则形参就没有意义了
还有另一个原因是编译有关的
局部变量是在栈分配空间的
生成的机器代码是近调用的短地址
而形参就很难说了
可能有的编译器,先按值参处理,最后再用结果修改形参
这样做就不用担心“直接用型参参与运算”的会频繁修改形参了
但是却不符合形参的本义
因此编译器会直接引用形参的地址,就会生成远调用的长地址了
把形参编译成长短不同的地址,这在调用系统功能时就有讲究了
你的代码里有“interrupt”字样,我没猜错的话就是中断调用
这时需要长地址还是短地址,那可是一点也不可弄错了
用局部变量就会得到短地址

热心网友 时间:2023-11-01 03:03

你注意到cur_pin是不同的类型了吗?正是因为需要转换类型所以才引入它 形参可以参与运算,都居于栈空间

热心网友 时间:2023-11-01 03:02

函数的副作用是最令人头疼的问题
我们都知道形参使得函数可以改变调用者的变量值
所以很容易产生副作用
所以函数设计时应当避免频繁改变形参的值
这就是你所看到的现象:“不直接用型参参与运算”
这样就不会改变调用者的变量值
当然最后还是要改变形参的值,否则形参就没有意义了
还有另一个原因是编译有关的
局部变量是在栈分配空间的
生成的机器代码是近调用的短地址
而形参就很难说了
可能有的编译器,先按值参处理,最后再用结果修改形参
这样做就不用担心“直接用型参参与运算”的会频繁修改形参了
但是却不符合形参的本义
因此编译器会直接引用形参的地址,就会生成远调用的长地址了
把形参编译成长短不同的地址,这在调用系统功能时就有讲究了
你的代码里有“interrupt”字样,我没猜错的话就是中断调用
这时需要长地址还是短地址,那可是一点也不可弄错了
用局部变量就会得到短地址

热心网友 时间:2023-11-01 03:03

你注意到cur_pin是不同的类型了吗?正是因为需要转换类型所以才引入它 形参可以参与运算,都居于栈空间
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
求这图片原图或者主角 出自哪一边电影或者电视剧 哪位大神知道这张图原版在吗?求原版。。。 在word中加下划线时第一次出现一条下划线第二次怎么就出现两条... 诛仙2资料站里的宠物展示能在npc买到吗 求一些诛仙2中的可以变为人形的宠物名字 诛仙2 神域的神农殿里,这是什么东西 诛仙2宠物元神问题 诛仙2 商城 中 宠物元神 怎么比 宠物 还贵啊?宠物元神是干什么的啊... 电热水器怎么安固定花洒 猛鬼夜惊魂剧情介绍 java中有哪些变量 volatile修饰的变量有什么作用 国际物流中的清关指的是什么?有啥用? 定义的局部变量赋值后再次调用时内容发生改变为什么 从美国寄来的快递,到国内清关后转EMS后一直无物流信息,是怎么回事? 局部静态变量的引用问题。。。先谢谢啦! volatile一般用来修饰结构体中的成员变量吗? 在同一个表达式为啥不能使用多个voalatile变量 像我这样的朋友。。萨克斯谱子和伴奏。。谢谢 脸咋这么厚简谱 1500g等於多少斤 1500g是几斤几两 1500克=多少斤啊 1500克几斤 1500克= 斤? 1斤= 克? 1500G=多少斤? 1500克是几斤 1500克是三斤吗 1500g是几斤 1500克是多少斤? volatile一般用来修饰结构体中的成员变量吗 java中不是局部变量就是成员变量这句话对吗??? java中变量学不会,好害怕,怎么办呢?呜呜呜呜呜...... 自动变量的区别 C语言有强行声明的局部变量吗? 请教volatile修饰函数有什么用途 广发卡绑定了支付宝,开通免密支付安全吗? 券妈妈,券老大等网站的各网站优惠券信息是怎么发放的 现在还有那几个可以免费兑换优惠券的网站可以提供下吗 梦见汽车被解体,还与别人打架 梦见自己正开着的汽车断开了 梦见自己开的汽车突然间成了碎片是什么意思? 梦见自己汽车比别的拆了而了后变成了? 国内有哪些sla机器的3d打印机比较好的厂家,求推荐 广东深圳3D打印机厂家有哪些 深圳的3D打印机厂家有哪些? 低保户维修房屋申请书范文 你们的照片用什么备份的 前列腺贴有用吗? 江苏扬州农商行对公账户(基本户),开通余额变动短信提醒,收费吗?