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

for循环中++运算符引发数组赋值异常的原因咨询

为什么for循环内使用i++赋值会导致数组每隔一位为0?

问题出在你在循环体里和for循环的增量部分都对变量i进行了自增操作,而且i++是后置自增运算符——执行逻辑是先返回变量当前值,再将变量自身加1。我们一步步拆解循环的执行过程:

  • 第一次循环:
    1. 初始化i = 0
    2. 判断0 < 10成立,进入循环体
    3. 执行numbers[i] = i++:先把当前i的值(0)赋值给numbers[0],然后i自增为1
    4. 执行for循环末尾的i++,i再次自增为2
  • 第二次循环:
    1. 判断2 < 10成立,进入循环体
    2. 执行numbers[i] = i++:把当前i的值(2)赋值给numbers[2],然后i自增为3
    3. 执行for循环末尾的i++,i再次自增为4
  • 后续循环以此类推,每次循环都会让i直接增加2

这样一来,数组的**偶数索引(0、2、4、6、8)会被依次赋值为0、2、4、6、8,而奇数索引(1、3、5、7、9)**从来没有被赋值过。因为C#中int数组初始化时,所有元素默认值为0,所以这些位置输出就是0。

对比另外两种写法的逻辑

  • 当你改成numbers[i] = i时,循环体里没有修改i的值,每次循环只有for末尾的i++让i增加1,所有索引都会被依次赋值,结果符合预期。
  • 改成numbers[i] = i+1同理,只是赋值的是i+1,但没有修改i本身,循环变量只会按for循环的规则每次加1,所有索引都能被赋值。

初学者注意事项

避免在同一个语句或同一个循环周期内多次修改同一个变量,这种写法会让代码逻辑混乱、可读性差,极易出现不符合预期的结果。如果需要调整循环变量,只在for循环的增量部分进行操作即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:05:37