【发布时间】:2021-01-14 15:27:44
【问题描述】:
我和 C 似乎对这里的预期输出意见不一。
我有:
struct r_struct {
int r_i;
float r_f, r_f2;
};
struct r_struct r;
r.f = 100.0;
[...]
printf("f is A:%f B:%d, C:%d, D:%d\n", r.f, r.f, r.f_lhzr / 1, (int)r.f);
我得到这个输出:
f is A:100.000000 B:0, C:1079574528, D:0
我希望得到这个输出,因为浮点数应该以所有三种方式转换为整数:
f is A:100.000000 B:100, C:100, D:100
这里有人可以解释一下吗?
【问题讨论】:
-
您期望的结果是什么?
-
relais.r_lhzr是一个float值,您使用它执行的所有计算都将产生浮点值。您不能使用%d格式说明符,因为它用于int值。格式说明符和参数类型不匹配会导致未定义的行为。 -
您只转换了
printf参数中的一个,其余的仍然是您尝试使用%d打印的float值. -
没有。它根本不知道如何“自动投射”。格式说明符只是字符串中的字符,对编译器没有任何意义。
-
这不是它的工作原理。
printf函数对传递给它的参数一无所知。它仅依赖于您在字符串中使用的格式说明符来解释这些参数占用的内存。编译器不会将任何类型的类型信息与参数一起传递。