首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于运算符自增的有关问题

2012-03-31 
关于运算符自增的问题!#include stdio.hvoid main(){int x,y,z1,z2x20y11z1(x++)+(x++)z2(++y)+

关于运算符自增的问题!
#include <stdio.h>

void main()
{
  int x,y,z1,z2;
  x=20;y=11;
  z1=(x++)+(x++);
  z2=(++y)+(++y);
  printf("%d,%d,%d,%d\n",x,y,z1,z2);
}

运行结果z1=40;
哪位高手帮忙给我讲讲 为什么x经过两次自增相加的结果是40啊?

[解决办法]
z1是40,虽然x经过两次自加,但+号两侧的(x++)返回的都是自加之前的20,所以相加之后是40。
x两次自加之后的值是22,具体细节要看编译器实现吧,实际写代码的时候最好别写这样“模棱两可”的代码。
[解决办法]
x++ 是先引用后增加
所以在同一行里,z1=x+x;
[解决办法]
相当于
x=20
z1=20+20; x++;x++;
关键是后面没有继续用到值变为22的x啊,
[解决办法]

探讨

如果z1=(x++)+(x++)和z1=x+x的结果是一样的 那么x++在这里到底有什么用啊?

[解决办法]
z1=(x++)+(x++)

未定义行为,避免使用
[解决办法]
google 月经贴

热点排行