作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
以下代码打印 99,其中 'c' 已隐式转换为 99。
printf("%d", 'c');
但是下面的代码打印出 0.000000:
printf("%f", 23);
为什么在第二种情况下整数 23 没有像第一种情况那样转换为 23.00000?这是否反射(reflect)了 C 中隐式转换的糟糕实现?提前致谢。
编辑:如果答案之一无法从 int 提升到 float,那么为什么在我们编写时将 int 提升到 float
float x = 23;
为什么会这样?
最佳答案
在 C 语言中,'c'是一个int
。不执行任何转换。
即使它是一个 char
(就像在 C++ 中一样),char
也是一个整数类型,并且在像 printf 这样的可变参数列表中
,所有可变参数都经过算术提升,这将自动将 char
扩展为 int
,或将 float
扩展为 double
-- 但不是 double
的 int
。
关于c++ - 为什么 C 没有正确的隐式转换实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32283257/
我是一名优秀的程序员,十分优秀!