【发布时间】:2020-05-20 06:04:21
【问题描述】:
c 代码:
int main(void) {
int i = 0, j = 0;
double avg = 0;
int *pi, *pj;
double *pavg;
..
pi = &i;
pj = &j;
pavg = &avg;
..
*pi = 5;
*pj = 10;
*pavg = (*pi + *pj) / 2;
在这里打印:
printf("%lf\n\n", avg);
它打印7.000000000
return 0;
}
【问题讨论】:
-
因为
(*pi + *pj) / 2;是一个 int 表达式,它产生的 7 被保存为 double。 -
它正在对
15 / 2 = 7进行整数除法,并且仅然后将其转换为double -
如何将其转换为双倍?
-
把 2.0 换成 2
-
为此我们需要一个规范的骗子。这是一个非常常见的常见问题解答——每个学习 C 的人都可能遇到这个错误。我们在 C 常见问题解答中有 this,但我认为它不够通用,无法用作此目的的欺骗目标。
标签: c integer double average integer-arithmetic