printf输出之后实际结果是x=1,y=0 |
x++是实现x自增,但是返回x原来的值的, |
这个是先赋值再加,++i是先加再赋值的 |
是对的 你先看看那个++ -- 的运算 |
++X, 表示先自加, 再进行运算, 而 X++表示先运算, 后自加. |
完全是正确的,可能是你的编译器有问题,或者你操作失误,我用的Codeblocks |
27($(UN9YF2%@XW9XK$LJ$1.png (22.91 KB, 下载次数: 132)
GA%T[5H_XB_3N_E}3Q%8W6R.png (250.23 KB, 下载次数: 139)
不呀,完全没有错。可能是你的编译器有问题,我用Codeblocks运行后,输出X=1,Y=0 |
运算优先级的问题?,++跟赋值号的优先级的优先问题,实际应用最简单的办法就是分开2行或者加个括号什么的.根本没必要去记那些运算优先级... 像这样写 x++; y=x; 就肯定不会有问题了. |
应该是所用软件的规则不一样吧。可能平台不支持这种语法 |
把++的语法好好复习一下吧 |
这是对的 |
x++,是x先取值0、就是y=0,然后x再自加1,x=1了; |
x++是先取x的值 再执行x=x+1 你想要预期结果的话要写y=++x |
y应该是y=y++吧 |
优先级不一样,++的优先级小于=的优先级 |
是对的哦 ,建议你看下程序有没有错误 |
是先x赋给y,然后x自加1 |
y=x++是先用再+1 y=++x才是+1再用 |
y=x++是先用x=0再在+1 |
把两个+号放在x的左边就是先算x+1的值赋给y |
这题很简单 首先x,y初值都是零,执行y=x++这个语句时 因为x++是先把值给y 自身才加一 所以y=0,然后x++这个语句只是单纯的 实际上x没有得到值所以还是为零 不知道这样说你能不能明白 |
运算优先级的问题 |
int x=0,y=0; y=x++; printf(“x=%d,y=%d”,x,y); 就会看到x=1,y=0 |
+号在右边 |
这个问题有点难 |
是0就对了 |
y = ++x,相当于 x=x+1; y= x; y = x++,相当于 y = x; x=x+1; |
建议详细查看c基础,查阅运算符结合规则,然后编程实践 |
“++”放在左边才是1,放在右边是先赋值再计算 |
加号在右边,那是先进行赋值在加一,所以执行语句后值不改变 |
z43218 发表于 2019-6-4 09:52 经过测试,这是Keil的坑。感觉所有的等式刚开始都不会被执行,只有++的变量被调用了,才会执行。 如下修改成下面就好了。 int i,j,k; i=0; j=0; j=i++; k=i; LED =0; while(1); |
这个是keil的代码优化的结果,x和y对整个程序无实际意义,kei给优化掉了。你可以试着改改优化等级。 |
没有什么为什么,就是编译平台的定义,换个平台或许就可以。 所以,用KELL,就看KELL的的规定! 尽可采用“不会引起岐义方式写程序” 不过某些老师,为了显摆自己,就是欢喜搞一些易歧义问题来坑人。 |
++和--在后面,先赋值再++。在前面先++再赋值 |
单纯从规范的角度,不建议这种写法。 |
这个不奇怪,你用x++ ,这个是先赋值给y 才加一 x++与++x的区别,y=x++;表示x先对y赋值然后再自+1,y=++x;表示x先自+1然后再对y赋值。 ++符号,在变量名的右边,是先取值、再自加1,即先把x值给y、x再自加1 |
楼主应该先看看C运算的优先级,运算优先级搞不清楚,其他都是瞎扯。 |