提问:函数参数与局部变量有什么区别

greatjerry 2005-05-11 11:40:18
我在编程时发现函数参数可以传递其他函数的参数 是这样吗
...全文
169 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
koko1998 2005-05-11
  • 打赏
  • 举报
回复
可以
不过注意他们的生命周期
lemon_wei 2005-05-11
  • 打赏
  • 举报
回复
楼上的讲的很清楚了
xqk 2005-05-11
  • 打赏
  • 举报
回复
基础太差了!

如果参数传递一个值的话,那么该函数会创建这个值的局部变量
如果参数传递一个指针的话,那么该函数会创建这个指针地址及数据的拷贝
如果参数传递一个引用的话,那么该函数会将这个指针地址传进来,所以修改引用的值就不是局部的了而是原内存地址的数据

但前两个都会成为局部变量,对局部变量的修改不会影响原值
oyljerry 2005-05-11
  • 打赏
  • 举报
回复
注意变量的生命期
菲斯可儿 2005-05-11
  • 打赏
  • 举报
回复
是的,它们都是在栈中存储、操作,函数结束后,释放。
BinaryTreeEx 2005-05-11
  • 打赏
  • 举报
回复
姑且认为没有区别也可以。
handwolf 2005-05-11
  • 打赏
  • 举报
回复
当然是了!

函数参数是从外部传进来的,可能是值(需要对应的构造函数),也可能是地址(指针)
nooning 2005-05-11
  • 打赏
  • 举报
回复
to xqk(夏乾坤) :
你应该去研究一下他们的汇编代码!!

无所谓值还是指针,或者引用,对于一个函数来说
参数是按照CAll 类型不同分成 入栈和入寄存器.
__stdcall 即 WINAPI 就是 入栈
__fastcall 前两个参数入ecx edx

无论是哪种方式,都不会为你另外开辟空间,除非你显式申请,或定义

所有的参数都会在返回时(或者后)被清理
语言方式不同,pascal/c 型被调用者清理栈(大部分windows api)
c++调用者清理(典型的printf,wsprintf等)

至于局部变量,是在当前栈上开辟的空间,是在进入函数体后,由 sub esp,xx 确定
由编译器帮你确定保留多大空间!!
虽然局部变量在退出函数后没有其本来的意义的,但你仍然可以引用它,因为那块内存的属性不会改变
至于其值是否还有含义则另当别论

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧