首页 > 代码库 > 令人纠结无比的a[i++]=i++
令人纠结无比的a[i++]=i++
int j = 0; int a[10]; a[++j]=j++; int j = 0; int a[10]; a[++j]=++j; int j = 0; int a[10]; a[j++]=j++; int j = 0; int a[10]; a[j++]=++j;
今天朋友问我,上面四个式子执行后,数组a的值分别是什么
正确答案是a[1] = 0, a[2] = 2, a[0]=0, a[1] = 1。和大部分人一样,我第一次也答错了。这四个式子看起来让人头晕,结果好像也十分奇怪。
因此我对这些代码用反汇编窗口进行调试
可以发现,含有j++的表达式,其中最后的j=j+1的递增操作总是在最后执行,看到这里想必大家都发现貌似j++的两个基本操作被打散了,它们不再是紧挨着执行了(不是返回j之后立马自增)。同时可以看到此时赋值操作总是在++j操作完成后进行。换句话说,当一行表达式中的++j全部计算完毕之后,再把表达式中的所有j全部替换成更新之后的值。若表达式还有j++,则最后执行j++的操作。
举个例子
int j = 0; int a[10]; a[j++]=++j;有一个++j,则表达式
a[j++]=++j等价于a[j]=j,(j=1),j++,故结果为a[1]=1,j=2
int j = 0; int a[10]; a[j++]=j++;
没有++j表达式
a[j++]=j++等价于a[j]=j,(j=0),j++,故结果为a[0]=0,j=1
令人纠结无比的a[i++]=i++
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。