同步阅读进度,多语言翻译,过滤屏幕蓝光,评论分享,更多完整功能,更好读书体验,试试 阅读 ‧ 电子书库
函数中的变量名字是局部的。这意味着在一个函数里定义的名字不会与其他地方相同的名字发生冲突。如果您在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原型:
void pound(int n): /* ANSI风格的原型 */
原型(prototype)是一个函数声明,它描述了函数的返回值和它的参数。这个函数原型说明了关于pound()函数的两件事情:
● 函数没有返回值。
● 函数接受一个int类型的参数。
因为编译器在main()使用pound()之前看到了这个原型,所以编译器知道pound()应该有什么类型的参数;并且在需要使实际参数的类型与原型保持一致时,编译器会插入一个类型指派。例如,函数调用pound(3.859)将被转换成为pound(3)。
请支持我们,让我们可以支付服务器费用。
使用微信支付打赏
