大佬么,关于下面两种写法有什么区别呢,为什么第二种会数组索引越界呢?
for (int i = 0; i < nums.Length;)
{
// 第一种写法
nums[i++] = nums[i] + 1;
i++;
// 第二种写法
nums[i++] = nums[i] + 1;
}
哈哈。很明显,对于第二种写法我上面的评论已经说了。第一种写法,就是单纯的数组每一位都加1,然后i++只是起一个循环的作用。
第二种,比如i=0时是nums[0]=nums[1]+1,i=1时是nums[1]=nums[2]+1。
而且,当i=nums.length-1的时候,变成了nums[nums.length-1] = nums[nums.length]+1不就越界了。
你错了,都会越界。
先讨论赋值语句:如果i是num.length-1,执行num[i++] = num[i]+1的时候变成了num[num.length-1] = num[num.length]+1就越界了
这就已经越界了。所以我说的两种都是越界的。
但是,数组的个数是奇数还是偶数就又不一样了。
如果是偶数比如6,第一种,for大括号内的i只会是0,2,4,所以num[4] = num[5]+1完全是正确的。
第二种,for大括号内的i可以是0,1,2,3,4,5,所以num[5] = num[6]+1越界
如果是奇数比如5,第一种,i = 0,2,4,num[4] = num[5]+1越界
第二种,i = 0,1,2,3,4,num[4] = num[5]+1越界。
两种写法都一样,区别是中间的i++,我想问一下,i++归属第一种写法还是第二种写法?
因为i ++是单目运算符,会先运行,所以后面的a [i ]+1比前面的i更大了
如果是归属第一种写法,那么数组就不会越界;
如果是归属第二种写法,那么数组就会越界。
第二种写法,当i已经是最后一个索引位置了,然后对i再进行一次++操作,i就已经超出索引范围了,数组在进行使用就越界了。
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
for (int i = 0; i < nums.Length;)
{
// 第一种写法
nums[i] = nums[i] + 1;
i++;
// 第二种写法
nums[i++] = nums[i] + 1;
}
不好意思各位,上面的代码写错了
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y
C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html
C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html