You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组元素求和:sum3方法为何失效?为何需强制转换double类型?

问题代码

#include <stdio.h>

int main()
{
  double   a[3] =  {1.,3.,5.};

  double sum1 = a[0]+a[1]+a[2];

  int i=0;
  double sum2 = (double)a[i]+(double)a[i+1]+(double)a[i+2];

  double sum3 = a[i]+a[i+i]+a[i+2];

  printf("sum1=%f sum2=%f sum3=%f\n",sum1, sum2, sum3);
}

运行结果

sum1=9.000000 sum2=9.000000 sum3=7.000000

解答

1. sum3失效的原因

这是典型的笔误问题:你把a[i+1]写成了a[i+i]。

此时变量i的值是0,i+i的计算结果是0+0=0,所以a[i+i]等价于a[0],而非你预期的a[1]。实际计算过程是:

  • a[i] = a[0] = 1.0
  • a[i+i] = a[0] = 1.0
  • a[i+2] = a[2] =5.0
    三者相加就是1.0+1.0+5.0=7.0,和你看到的结果完全吻合。只要把a[i+i]改成a[i+1],sum3的结果就会和sum1、sum2一致。

2. sum2里的强制转换完全多余

数组a的类型是double[],所以数组中的每个元素本身就是double类型。当你通过a[i]、a[i+1]访问元素时,得到的结果天然是double类型,根本不需要用(double)进行强制转换。sum2里的强制转换属于无意义的冗余操作,删掉后代码功能和结果都不会受影响。


内容的提问来源于stack exchange,提问作者rkg125

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 11:30:02