——函数的参数——
——形参和实参——
形参:只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。
实参:可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。
数据单向传送,实参传递给形参,不能形参传递给实参。
看下面这段代码:

其中,x和y是形参,1和2是实参。如果我们不调用test这个函数,x和y是永远不会被分配内存的,但是1和2这两个实参是要占内存空间的。
——位置调用和关键字——
位置调用:x和y又名位置参数,也就是说,x和y是有位置顺序区别的,如果我们调换实参中赋值的顺序,则可见到如下结果:

可以看到,形参和实参是一一对应的。
看下面 这一段代码:

注意区分x和y,x=x,前面的x是指的是test的形式参数,后面的x指的是x=1的这个变量名x,y同理,注意区分清楚。
关键字调用:实参除了上述的赋值方式之外,可以以关键字进行赋值:

这样的好处是,就可以不用严格按照形参的顺序来进行一一对应的赋值。
这两种调用方式可以混用,但是位置调用一定要在关键字调用之前:


这样的写法是错误的。


这样就ok了。
再看下面这样一种写法:

错误原因是:x拥有多个值。
所以,位置调用和关键字调用,两者在进行混用的时候,是先默认进行位置调用,后面给的关键字调用的参数,不能是前面已经赋值过的参数。
网友评论