形参和实参的问题

604 篇文章 8 订阅
579 篇文章 5 订阅

昨天编码的时候遇到函数的形参是指针问题,各种没搞懂,今天整理一下:


1.函数的参数分为形参和实参两种。在本小节中,进一步介绍形参、实参的特点和两者的关系。形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。形参和实参的功能是作数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。
函数的形参和实参具有以下特点:
1. 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。
2. 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。
3. 实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误。
4. 函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。


2.虽然函数是在被调用的时候,给形参赋值,但是这种赋值并不是说在函数调用的时候,形参就是实参,而是重新分配一个空间,存储函数要用的参数,这个参数的值等于实参的值。

在c语言中,函数调用都是传值。也就是说,形式参数是实际参数的一个备份。
  所以当形参是普通变量的时候,在函数中操作形参的值,函数返回后变成实参的地址所指向的值,两个内存不同,所存的值也不同。
      
当形参是指针的时候,copy过来的是指针的值,但是这个值所指向的内容是实参指向的内容,故改变之后实参的内容也改变了,但是这里改变指针的指向,将指针指向
另一块内存,这个时候函数结束,实参的内存还是没有变化。

  也就是说,数据实际都是存在内存中的,只有改变内存中的数据才能改变实际的值,所以形参必须和实参的内存一致,才能改变实参。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值