for循环中++运算符引发数组赋值异常的原因咨询
为什么for循环内使用i++赋值会导致数组每隔一位为0?
问题出在你在循环体里和for循环的增量部分都对变量i进行了自增操作,而且i++是后置自增运算符——执行逻辑是先返回变量当前值,再将变量自身加1。我们一步步拆解循环的执行过程:
- 第一次循环:
- 初始化
i = 0 - 判断
0 < 10成立,进入循环体 - 执行
numbers[i] = i++:先把当前i的值(0)赋值给numbers[0],然后i自增为1 - 执行for循环末尾的
i++,i再次自增为2
- 初始化
- 第二次循环:
- 判断
2 < 10成立,进入循环体 - 执行
numbers[i] = i++:把当前i的值(2)赋值给numbers[2],然后i自增为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
相关产品推荐
相关产品推荐

