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

为何给定C#代码输出为1,13,3?我的推导与实际结果不符

问题解析:为什么arr[i++] = arr[i] + 10的输出是1,13,3而非1,12,3?

这是个很典型的运算符优先级与执行顺序问题,你之前的拆分逻辑搞错了C#中这条语句的执行步骤,咱们一步步拆解来看:

先贴出你的代码方便对照:

int[] arr = { 1, 2, 3 };
int i = 1;
arr[i++] = arr[i] + 10;
Console.WriteLine(String.Join(",", arr));

你之前误以为是先执行arr[i] = arr[i] +10再执行i++,但C#对于这条语句的执行规则和你想的不一样,正确的执行步骤是:

  1. 处理左侧的数组索引表达式i++:
    • 先获取当前i的取值:1,这个值会作为后续赋值的数组下标
    • 立即将i的值自增为2
  2. 计算右侧的表达式arr[i] + 10:
    • 此时i已经是2了,所以arr[i]就是arr[2],取值为3
    • 3 + 10 = 13
  3. 完成赋值操作:把右侧计算得到的13赋值给左侧的arr[1](第一步确定的下标)

走完这三步后,数组arr就变成了{1,13,3},和你实际运行的结果一致。

你的误区在于把i++的执行顺序放到了赋值完成之后,但实际上后置递增运算符i++在被用来确定数组下标的时候,是先使用当前i的值,立刻自增,而不是等整个赋值语句完成才执行自增。

简单提炼关键点:

  • 后置递增i++的核心行为:先取值使用,再自增
  • 该赋值语句的执行流程:先确定左侧目标位置(触发i自增)→ 计算右侧值 → 完成赋值

内容的提问来源于stack exchange,提问作者A. Gopal Reddy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:57:46