|
subroutine efg(a,b,c) 这里的 a b c 是虚参。
call efg(a,b,c) 这里的 a b c 是实参。
实参和虚参名字可以一样,也可以不一样。
我说的对应,是位置对应。
在我的例子中。男方,女方,是虚参。郭靖黄蓉是实参。
实参和虚参需要对应(否则郭靖成了女方,黄蓉成了男方岂不是笑话了?)
但是名字可以随意,一样,或不一样,都可以。
有一些极端的情况下,名字一样但位置不对应。
subroutine efg(a,b,c)
call efg(c,b,a)
此时,实参的a对应虚参的c,实参的c对应虚参的a。
记住,实参属于调用者,虚参属于被调用者。他们的命名空间是独立的(这样非常有好处,尤其是程序变得很庞大之后)
实参必须在调用者中定义,虚参必须在被调用者中定义。(不管他们变量名字是否相同)编译器会帮你检查实参虚参的类型是否一致。(毕竟,男方女方需要是一个人,而实参不能是条狗)
为了让你理解。我把之前的例子扩展一下:
subroutine 结婚(男方,女方)
subroutine 贷款(主贷人,连带贷款人)
call 结婚(郭靖,黄蓉)
call 贷款(黄蓉,郭靖)!第一次贷款
call 贷款(郭靖,黄蓉)!第二次贷款
|
|