为什么 (5+10)/2 是 7.0 而不是 7.5?C编程

Eby*_*Eby 2 c double integer average integer-arithmetic

代码:

 int main(void) {
 int i = 0, j = 0;
 double avg = 0;
 int *pi, *pj;
 double *pavg;
Run Code Online (Sandbox Code Playgroud)

..

    pi = &i;
    pj = &j;
    pavg = &avg;
Run Code Online (Sandbox Code Playgroud)

..

    *pi = 5;
    *pj = 10; 
    *pavg = (*pi + *pj) / 2;
Run Code Online (Sandbox Code Playgroud)

在这里打印:

    printf("%lf\n\n", avg);
Run Code Online (Sandbox Code Playgroud)

它打印 7.000000000

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

bab*_*bon 7

当你这样做时(*pi + *pj) / 2,你正在做整数运算。在分配给double变量之前,小数点后的数字已经被丢弃。

一种方法是做(*pi + *pj) / 2.0。表达式的操作数之一是双精度数,其他ints 将double在计算表达式之前提升为s。

另一种选择是将其中一个变量类型转换为 double ((double)*pi + *pj) / 2。在这里,优先级更高的取消引用运算符将​​在类型转换之前进行评估。