关于从加自减
关于自加自减
同理我试了
结果是m=3,n=2.
而且我发现奇葩的空格效果...
就是 空格如果不加 或者乱加的话效果不一样。比如像
就显示错误。
求各位大神解释下自加自减在这个程序中对n的影响和自加自减本身的效果...谢了!
------解决方案--------------------
token的解析是“贪婪”来着。
另外副作用不明确的语句就不要深究了。
------解决方案--------------------
楼主去看看置顶贴http://bbs.****.net/topics/370153775
------解决方案--------------------
字表达的求值顺序C/C++标准没有规定,因此结果取决于编译器实现。
第三个为什么编译错误?
#include<stdio.h>发现此时m是3,n是6.这是说明++m的话是m先自加2次再参与对n的计算么?
main()
{
int m,n;
m = 1;
n = ++m + ++m;
printf("%d %d",m,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.****.net/topics/370153775
------解决方案--------------------
n = ++m + ++m;
n = m++ +m++;
字表达的求值顺序C/C++标准没有规定,因此结果取决于编译器实现。
第三个为什么编译错误?
++m++;//自增++的优先级一样,所以由结合性决定,而++是右结合的, 因此相当于++(m++),而m++是一个右值表达式,而(前置或后置)++要求操作数是一个左值,因此报错。
(++m)++; //在C++中合法,在C中一样非法。因为在C中,++m也是一个右值表达式,
//但是在C++中,++m是一个左值表达式