为何给定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#对于这条语句的执行规则和你想的不一样,正确的执行步骤是:
- 处理左侧的数组索引表达式
i++:- 先获取当前i的取值:1,这个值会作为后续赋值的数组下标
- 立即将i的值自增为2
- 计算右侧的表达式
arr[i] + 10:- 此时i已经是2了,所以
arr[i]就是arr[2],取值为3 - 3 + 10 = 13
- 此时i已经是2了,所以
- 完成赋值操作:把右侧计算得到的13赋值给左侧的
arr[1](第一步确定的下标)
走完这三步后,数组arr就变成了{1,13,3},和你实际运行的结果一致。
你的误区在于把i++的执行顺序放到了赋值完成之后,但实际上后置递增运算符i++在被用来确定数组下标的时候,是先使用当前i的值,立刻自增,而不是等整个赋值语句完成才执行自增。
简单提炼关键点:
- 后置递增
i++的核心行为:先取值使用,再自增 - 该赋值语句的执行流程:先确定左侧目标位置(触发i自增)→ 计算右侧值 → 完成赋值
内容的提问来源于stack exchange,提问作者A. Gopal Reddy
相关产品推荐
相关产品推荐

