将 double 类型 赋值给char类型,也可以执行?

来源:2-8 自动类型转换

goodwenwen

2015-09-17 21:40

1、为什么将 double 类型 赋值给char类型,也可以执行?

2、为什么在格式化输出中,以%c 输出 char类型,double类型,也可以执行?

http://img.mukewang.com/55fac28f0001c89405210375.jpg

写回答 关注

3回答

  • onemoo
    2015-09-17 23:56:23
    已采纳
    1. 在赋值(初始化)时,如果两侧类型不一致的话,等号右侧的变量会临时转换为左侧的类型,这不会影响右侧变量本身的类型和值,转换后的值再给左侧赋值。

      char属于整型,那右侧的值就会从浮点型转为整型,转换过程是丢弃小数部分,所以char会获得d的整数部分的值。

      其实第5,6,7,8行都发生了这种自动类型转换。

    2. printf会把后面的参数按照前面的格式化指示符来解释并输出,在使用时要求一定要类型相符。但注意:类型不符的话,函数仍会去读取那个变量的值,且只会按照指示的类型来解释(而不管实际的类型,实际上函数根本就无从知晓),而不同类型在内存中的存储结构可能不同,这样会导致输出“乱码”乃至崩溃。

      n 和 x 都算是整型,存储结构是一样的,所以输出还算没有问题。除非必须,否则尽量避免这样写。

      而一般浮点型的存储方式与整型大不一样,所以按照char来输出浮点型一般会有问题。这里d的输出结果也不正常。

  • goodwenwen
    2015-10-08 09:08:00

    抱歉刚刚看到回答,回答的很详细,非常感谢!

  • Virture
    2015-09-17 23:48:01

    ASCII码

C语言入门

C语言入门视频教程,带你进入编程世界的必修课-C语言

926025 学习 · 20793 问题

查看课程

相似问题