形式参数与实在参数
如前所述,函数分为有参函数与无参函数。对有参函数而言,函数定义时的参数为形式参数(简称形参)。而在调用有参函数时,无论采用何种调用形式,调用语句中的参数都称为实在参数(简称实参)。主调函数与被调函数之间有数据或地址的传递关系,前者称为传值调用,后者叫做传址调用。下面介绍形式参数与实在参数的关系及注意点,这些概念都是正确编写函数的基础。
(1)对定义函数时所指定的形参变量,程序编译时并不为其分配存储空间,只有在被调用时,形参才临时占有存储空间,并从主调函数中获得值,实现实参与形参的“虚实结合”。调用结束后,流程返回主调函数,形参所占用的存储空间即被全部释放。
(2)实参可以是变量、常量或表达式,但要求它们在调用函数时有确定的值,调用时将实参的值赋给形参变量。值得注意的是,若形参是数组名时,则传递的是数组的首地址而不是变量的值。
(3)在函数的定义中,必须指定形参的类型。
(4)函数调用时,形参与实参的类型必须一致,但字符型与整型可以相互通用。
(5)实参变量对形参变量的数据传递是“值传递”,这种传递是单向的,只能由实参传给形参,而不能由形参再传给实参。
(6)当一个函数带有多个参数时,C++语言没有规定在函数调用时实参的求值顺序,而编译器根据对代码进行优化的需要自行规定对实参的求值顺序。一种是自左至右,另一种是自右至左,求值顺序的不同对一般参数来说没有影响。但是,若实参表达式中带有副作用的运算符时,因为求值顺序的不同可能造成二义性。
如: intx=4,y=5,z;
z=add-int(++x,x+y);
对于这种表达式调用,实参分别是++x和x+y,如果编译器对实参的求值顺序是自左至右,则两个实参的值分别为5和10;而如果编译器对实参的求值顺序是自右至左,则两个实参的值分别为5和9,这将造成二义性。
超实用性的Python零基础入门到进阶视频源码淘宝¥2购买已下架设置函数参数的默认值
在C++语言中,允许在函数的说明或定义时给一个或多个参数指定默认值,但是要求在一个指定了默认值的参数的右边不能出现没有指定默认值的参数。
上述对函数example()的定义中,对该函数的最右边的一个或两个参数指定了默认值,在函数调用时编译系统按从左到右的顺序将实参与形参结合,当实参的数目不足时,编译系统将按同样的顺序说明或定义中的默认值来补足所缺的实参。即用表达式:
调用函数example(intx,inty,intz=3)是等价的。当然也可以用a=example(15)调用函数example(intx,inty=5,intz=3)。
值得注意的是,在为某个参数指定默认值时,默认值不仅可以是一个数值,也可以是一个任意复杂的表达式。
好了,本文到此结束。如果对编程、计算机、程序员方面感兴趣的话,欢迎私信联系我,随时交流!点个