1、为什么将 double 类型 赋值给char类型,也可以执行?
2、为什么在格式化输出中,以%c 输出 char类型,double类型,也可以执行?
在赋值(初始化)时,如果两侧类型不一致的话,等号右侧的变量会临时转换为左侧的类型,这不会影响右侧变量本身的类型和值,转换后的值再给左侧赋值。
char属于整型,那右侧的值就会从浮点型转为整型,转换过程是丢弃小数部分,所以char会获得d的整数部分的值。
其实第5,6,7,8行都发生了这种自动类型转换。
printf会把后面的参数按照前面的格式化指示符来解释并输出,在使用时要求一定要类型相符。但注意:类型不符的话,函数仍会去读取那个变量的值,且只会按照指示的类型来解释(而不管实际的类型,实际上函数根本就无从知晓),而不同类型在内存中的存储结构可能不同,这样会导致输出“乱码”乃至崩溃。
n 和 x 都算是整型,存储结构是一样的,所以输出还算没有问题。除非必须,否则尽量避免这样写。
而一般浮点型的存储方式与整型大不一样,所以按照char来输出浮点型一般会有问题。这里d的输出结果也不正常。
抱歉刚刚看到回答,回答的很详细,非常感谢!
ASCII码