阅读 ‧ 电子书库 参数(argument)与参量(parameter)
尽管术语参数和参量可以互换地使用,但C99文档已经规定:对实际参数或者实际参量使用术语参数,对形式参量或者形式参数使用术语参量。遵循这个约定,我们可以说参量是变量,而参数是由函数调用提供的值,并且将它赋给相对应的参量。

函数中的变量名字是局部的。这意味着在一个函数里定义的名字不会与其他地方相同的名字发生冲突。如果您在pound()里使用times代替n,将产生一个与main()里的times不同的变量。也就是说,您有两个同名的变量,但是程序可以分清楚它们。

现在我们看看函数调用。第一个函数调用是pound(times),正如我们所提到的,该函数调用导致times的值5被赋给n。这导致函数打印5个英镑符号和一个换行符。第二个函数调用是pound(ch)。这里ch是char类型。它被初始化为!字符,在ASCⅡ系统里它意味着ch的数值为33。自动提升机制把char类型提升到int类型,(在此系统中)它把存储在1个字节的33转换为存储在4个字节中的33,所以值33现在以正确的形式被用作函数的参数。最后的调用pound((int)f)使用类型指派来将float类型的变量转变成这个参数的正确类型。

假设您漏掉了类型指派,如果使用现代C,程序将为您自动完成类型指派。这是因为在文件头部声明了该函数的ANSI原型:

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

void pound(int n): /* ANSI风格的原型  */

原型(prototype)是一个函数声明,它描述了函数的返回值和它的参数。这个函数原型说明了关于pound()函数的两件事情:

● 函数没有返回值。

● 函数接受一个int类型的参数。

因为编译器在main()使用pound()之前看到了这个原型,所以编译器知道pound()应该有什么类型的参数;并且在需要使实际参数的类型与原型保持一致时,编译器会插入一个类型指派。例如,函数调用pound(3.859)将被转换成为pound(3)。