简单区别形参与实参,传值与传地址

简单区别形参与实参,传值、传地址与传引用

函数的参数分为两种,分别是实际参数(实参)和形式参数(形参)
实际参数:
真实传给函数的参数,叫实参。实参可以是:常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时,他们都必须是确定的值,以便把这些值传递给形参。
形式参数:
形式参数是指函数名括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数值在函数中有效。
两者进行比较:形参出现在函数定义中,在整个函数体内都可以使用,离开函数不能使用。实参出现在主函数中进入被调函数后,实参变量也不能使用。形参和实参的功能是作数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。
函数的形参和实参具有以下特点:

  • 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。
  • 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。
  • 实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配的错误。
  • 函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。如果要是实参的值发生变化,则需要传地址。

传值,传地址,传引用比较:

  • 传值:
    是把是实参的值赋给形参,对形参的更改不会影响实参的值,仅将对象的值传递给目标对象,就相当于copy,系统为目标对象重新开辟一个完全相同的内存栈空间,然后把对象的值复制到栈中。

  • 传地址:
    传址是把函数外部创建变量的内存地址传递给函数参数,不是普通的如int,传递地址以后,系统在栈中开辟空间存放地址,实参和形参都指向同一个对象。这种传参方式可以让函数和函数外面的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量。

  • 传引用
    真正的以地址的方式传递参数,传递以后,形参和实参都是同一个对象,只是他们名字不同,对形参的修改将影响实参的值,将对象在内存的地址传给目标对象,相当于使目标对象和原始对象对应同一个内存存储空间,此时,若对目标对象进行修改,内存中的数据也会改变。

猜你喜欢

转载自blog.csdn.net/weixin_45796387/article/details/110505128