C语言学习指南:从规范编程到专业级开发
上QQ阅读APP看书,第一时间看更新

5.4.2 显式类型转换

隐式类型转换可能会出现错误的或者不符合我们期望的结果。为了避免这种现象,我们可以显式地改变某个值的类型,然而这只是一种临时措施,并不影响C语言默认的处理规则。这样的类型变化操作称为casting[1]。它的意思是说,我们把某个变量的值显式地(明确地)转换成另一种类型,让它临时当作那种类型的值来使用。这项操作并不会修改变量本身的类型与取值。

我们可以给任何一个表达式(或者变量)前面添上(type),继而将这个表达式的值从它的显式类型转换为type类型,这种转换只在程序执行这个表达式的过程中有效,一般来说,这意味着这种转换只在程序执行该表达式所在的那条语句时有效。这个操作不会修改变量的显式类型,也不会修改该变量的取值。下面我们写一个名为casting.c的范例程序:

请录入这段代码,然后保存文件,最后编译并运行casting.c程序。你应该会看到类似下面这样的输出信息。

在casting.c程序中,第一条除法表达式没有做手工类型转换,而且程序也不会自动转换这两个操作数的类型,因此,它们相除的结果依然是整数,不会带有小数部分。程序在把这个结果赋给result变量时会自动将其转换成double类型,但这并不会让除法所产生的小数部分也出现在result里面,因为程序刚才执行的是整数除法,这种除法本身就不考虑商的小数部分。第二与第三条除法表达式都将其中一个操作数手工转换为double类型,从而使程序将另一个操作数也自动地(隐式地)转换为double,以便在两个double值之间执行实数除法。这样算出来的商同样是double类型,把这种值赋给double型的result变量不会引发截取(也叫截断或截尾)现象。

对numerator或denominator变量值所做的手工类型转换,只在程序执行到该值所处的表达式时生效,而不会永久地修改这两个变量值的类型。

[1] 俗称强制类型转换。本书酌情译为手工类型转换或手动类型转换。——译者注