直面高山 2024-11-30 09:51 采纳率: 33.3%
浏览 14
已结题

:为什么输出结果是 0 而不是 2

int i,j,a[10]={0}; for(i=0;i<10;i++) { a[i]=i++; } printf("%d",a[2]);

  • 写回答

1条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    你的代码片段存在一个问题,导致了输出结果为 0 而非预期结果 2。问题在于你使用了 i++ 这种复合赋值运算符在数组赋值时。在这个代码中,你尝试将 i 的值赋给数组 a 的相应元素,并且同时增加 i 的值。然而,在 C++ 中,数组元素赋值和 i++ 操作是分开进行的。因此,你的代码实际上并没有将 i 的当前值(在循环中的值)赋给数组 a 的元素。正确的做法是先进行赋值操作,然后再增加 i 的值。

    以下是修正后的代码片段:

    #include <iostream>
    using namespace std;
    
    int main() {
        int i, j;
        int a[10] = {0}; // 初始化数组 a 为全零
        for (i = 0; i < 10; i++) { // 使用循环来填充数组 a
            a[i] = i; // 先将 i 的当前值赋给数组元素 a[i],然后再增加 i 的值
        }
        printf("%d", a[2]); // 输出数组 a 的第三个元素(下标为 2)的值
        return 0; // 程序结束返回 0
    }
    

    在修正后的代码中,我将 a[i]=i++ 更改为 a[i]=i 以确保将当前循环变量 i 的值赋给数组 a 的相应元素。现在循环的第三次迭代中(此时 i 为 2),a[2] 会被赋值为 2,因此最终的输出应该是 2。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月28日
  • 已采纳回答 12月20日
  • 创建了问题 11月30日