在 main 函数中,函数subtraction被调用了多次。我们用了几种不同的调用方法,因此你可以看到在不同的情况下函数如何被调用。 为了更好的理解这些例子,你需要考虑到被调用的函数其实完全可以由它所返回的值来代替。例如在上面例子中第一种情况下 (这种调用你应该已经知道了,因为我们在前面的例子中已经用过这种形式的调用): z = subtraction (7,2); cout << "The first result is " << z; 如果我们把函数调用用它的结果(也就是5)替换,我们将得到: z = 5; cout << "The first result is " << z; 同样的 cout << "The second result is " << subtraction (7,2); 与前面的调用有同样的结果,但在这里我们把对函数subtraction 的调用直接用作cout的参数。这可以简单想象成我们写的是: cout << "The second result is " << 5; 因为5 是subtraction (7,2)的结果。 在 cout << "The third result is " << subtraction (x,y); 中,与前面的调用唯一的不同之处是这里调用subtraction 时的参数使用的是变量而不是常量。这样用时毫无问题的。在这个例子里,传入函数subtraction 的参数值是变量x 和y中存储的数值,即分别为5 和3,结果为2。 第四种调用也是一样的。只要知道除了 z = 4 + subtraction (x,y); 我们也可以写成: z = subtraction (x,y) + 4; 它们的结果是完全一样的。注意在整个表达式的结尾写上分号semicolon sign (;)。它并不需要总是跟在函数调用的后面,因为你可以有一次把它们想象成函数被它的结果所替代: z = 4 + 2; z = 2 + 4; 没有返回值类型的函数,使用void. 如果你记得函数声明的格式: type name ( argument1, argument2 ...) statement 就会知道函数声明必须以一个数据类型(type)开头,它是函数由return 语句所返回数据类型。但是如果我们并不打算返回任何数据那该怎么办呢? 假设我们要写一个函数,它的功能是打印在屏幕上打印一些信息。我们不需要它返回任何值,而且我们也不需要它接受任何参数。C语言为这些情况设计了void 类型。让我们看一下下面的例子:
void printmessage (void) { cout << "I'm a function!"; } 虽然在C++ 中void可以被省略,我们还是建议写出void,以便明确指出函数不需要参数。 你必须时刻知道的是调用一个函数时要写出它的名字并把参数写在后面的括号内。但如果函数不需要参数,后面的括号并不能省略。因此调用函数 printmessage 的格式是 printmessage(); 函数名称后面的括号就明确表示了它是一个函数调用,而不是一个变量名称或其它什么语句。以下调用函数的方式就不对: printmessage; 函数II(Functions II) 参数按数值传递和按地址传递(Arguments passed by value and by reference) 到目前为止,我们看到的所有函数中,传递到函数中的参数全部是按数值传递的(by value)。也就是说,当我们调用一个带有参数的函数时,我们传递到函数中的是变量的数值而不是变量本身。 例如,假设我们用下面的代码调用我们的第一个函数addition : int x=5, y=3, z; z = addition ( x , y ); 在这个例子里我们调用函数addition 同时将x和y的值传给它,即分别为5和3,而不是两个变量: 这样,当函数addition被调用时,它的变量a和b的值分别变为5和3,但在函数addition内对变量a 或b 所做的任何修改不会影响变量他外面的变量x 和 y 的值,因为变量 |