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

关于从加自减

2013-01-04 
关于自加自减#includestdio.hmain(){int m,nm 1n ++m + ++mprintf(%d %d,m,n)}发现此时m是3,n

关于自加自减

#include<stdio.h>
main()
{
   int m,n;
   m = 1;
   n = ++m + ++m;
printf("%d %d",m,n);
}
发现此时m是3,n是6.这是说明++m的话是m先自加2次再参与对n的计算么?
同理我试了
#include<stdio.h>
main()
{
   int m,n;
   m = 1;
   n = m++ +m++;
printf("%d %d",m,n);
}

结果是m=3,n=2.
而且我发现奇葩的空格效果...
就是 空格如果不加 或者乱加的话效果不一样。比如像
#include<stdio.h>
main()
{
   int m,n;
   m = 1;
   n = m+ ++m++;
printf("%d %d",m,n);
}

就显示错误。
求各位大神解释下自加自减在这个程序中对n的影响和自加自减本身的效果...谢了!
[解决办法]
token的解析是“贪婪”来着。
另外副作用不明确的语句就不要深究了。

[解决办法]
楼主去看看置顶贴http://bbs.csdn.net/topics/370153775
[解决办法]
n = ++m + ++m;

n = m++ +m++;

字表达的求值顺序C/C++标准没有规定,因此结果取决于编译器实现。

第三个为什么编译错误?
++m++;//自增++的优先级一样,所以由结合性决定,而++是右结合的, 因此相当于++(m++),而m++是一个右值表达式,而(前置或后置)++要求操作数是一个左值,因此报错。
(++m)++; //在C++中合法,在C中一样非法。因为在C中,++m也是一个右值表达式,
//但是在C++中,++m是一个左值表达式
 

热点排行