参数传递机制

名字、标识符和变量

标识符(identifier)是一个字符串,通常由字母和数字组成。

所有的标识符都是名字,但名字不一定是标识符,也可以是表达式,如名字x.y 表示x 所指的结构中的字段y ,其中x,y 是标识符

变量指向存储中的某个特定的位置:

  • 同一个标识符可以被多次声明,每个声明引入一个新的变量

  • 即使只声明一次,递归中的局部标识符将在不同时刻指向不同的存储位置

显式访问控制

通过punlic、private、protected 这样的关键字,OOP语言提供了对超类中的成员名字的显式访问控制。

  • private 作用域仅包含该类和友类

  • protected 也可由子类访问

  • public 也可从类外访问

参数传递机制

值调用(call-by-value)

  • 实参求值(如果它是表达式)或拷贝(如果它是变量),放在相应形参的内存位置上

  • 这种方法在C和Java中使用,也是C++语言以及大多数语言的一个常用选项

  • 改变形参的值不影响实参

  • 虽然Java只使用值调用,但是只要把一个对象的名字传递给一个被调用过程,那么过程收到的值实际上是这个对象的指针。因此,被调用过程是可以改变这个对象本身的值的

引用调用(call-by-reference)

  • 实参的地址作为相应的形参的值被传递给被调用者

  • 改变形参看起来就像是改变了实在参数一样

名调用(call-by-name)

  • 被调用者的运行方式好像是用实参以字面方式替换了被调用者的代码中的形参一样

  • 形参是一个代表了实参的宏

Last updated