首页 新闻 会员 周边 捐助

今天看到一个.net面试题

0
[已解决问题] 解决于 2022-12-13 17:46

有木有大佬能解释下为啥i++不会变,但是最后一张图变了

灬丶的主页 灬丶 | 初学一级 | 园豆:9
提问于:2022-12-03 09:24
< >
分享
最佳答案
0

Iist[i]++; 等效于:
函数 {
int m = list[i];
list[i] = list[i] + 1;
return m;
}

++Iist[i]; 等效于:
函数 {
list[i] = list[i] + 1;
return list[i];
}

二者区别是:一个返回加 1 之前的值;一个返回 加1 之后的值。

你在代码中,list[i] ++ 或 s++ 只用到了 第一种情况。而第三次有所不同,是因为 第三次你用了2次 循环,在第一次循环时,各元素已经分别 +1 了。

奖励园豆:5
误会馋 | 菜鸟二级 |园豆:242 | 2022-12-05 10:04
其他回答(4)
0

跟for还是ForEach无关
你写两遍for也是第三张图的结果
这个就是值类型传递,就是会变啊

wdwwtzy | 园豆:114 (初学一级) | 2022-12-03 10:13

为啥第一个和第二个不会变,第三个会变

支持(0) 反对(0) 灬丶 | 园豆:9 (初学一级) | 2022-12-03 11:02
0

i++ 返回原来的值,++i 返回加1后的值。
i++不能用作左值,但++i可以。i++前者是先赋值,然后自行增加++i后者是先自增,然后赋值。
第三个会变,是因为第二次循环,list里的值都 已经++过了。
你看看下图的结果:

中华鲟3670 | 园豆:922 (小虾三级) | 2022-12-04 09:24
0

i++是调用一次后加1,第一个例子和第二个例子都是调用了一遍,并且是调用时 i 还没有加1,执行完后,变量都加了1了,只是没有再次打印,看不出来。

最后一个例子调用了两次,第一次调用后都加1了,第二次调用时效果就看出来了。

空明流光 | 园豆:111 (初学一级) | 2022-12-05 14:08
0

var i=1 console.write(i++) //1 console.write(++i) //2
++是自增运算符,console.write调用时如果++在右侧则先打印i,在调用i++.如果++在左侧则先调用++,在打印i就变成了2

a1010 | 园豆:301 (菜鸟二级) | 2022-12-08 13:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册