问题描述
解决方案
解决方案二:
问题的关键在于你的表达式是一个副作用表达式,用它给它自身赋值,存在二义性。
如果你是
x=j++;
或者j = j + 1
都不存在这种二义性。
现在的问题就是看编译器怎么理解了。也就是说作为一个表达式,++是对原先表达式中的j自增,还是对赋值以后的j自增。
解决方案三:
j=++j这句代码,编译器会给出警告The assignment to variable j has no effect。所以,这行代码本质上就是++j操作。
而j=j++;这句代码则能正确赋值,但是它的本质也是j=j;因为在java中的这样的赋值相当于下面的赋值操作:
temp = j;
j = j+1 ;
j = temp;
所以就是这两种结果了。
解决方案四:
在我给你的链接中详细说明了二义性的问题。
解决方案五:
在C99之前的编译器,不支持括号内进行定义变量
2.在C++中是允许定义变量的,其c99之后的编译器亦可以在括号内进行声明变量。
#include<stdio.h>//c++可以编译,但是c不能编译
int main()
{
int sum=0;
for(int i=0;i<=100;++i)//定义并初始化变量i=0.实际编译器运行不起来。但把int i......
答案就在这里:for循环内变量定义问题
解决方案六:
j=j++和j=++j的含义不一样,第一个是先将j的值赋给j在执行++操作,所以还为0
解决方案七:
j = j++赋值给j时是j加1之前的值即为0,所以一直是在0加1之前赋给j,所以j一直是0,而j = ++j是在j加1之后再赋值给j,所以j会逐渐增1,还有就是i的值应该是从0开始增长的吧,你的截图是不是不完全
解决方案八:
最后一句println输出 没有截图
解决方案九:
j=j++:因为“++”的运算级比赋值“=”高,所以先执行j++,但是j++的规则是先把原先的j保存,然后执行+1操作,结果就是把++前的j 赋值给j。
j=++j:原理同上,只是保存的是执行++后的j赋值给j