关于(++a)+(++a)+(++a)的问题该怎样思考?#include void main(){int a=5,b;b=(++a)+(++a)+(++a);printf("%d\n",b); }的运行结果是什么?在vc6.0上运行的结果为22,可是书上的结果却为24.这样的题该怎样思考呢?

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/16 20:22:08
关于(++a)+(++a)+(++a)的问题该怎样思考?#include void main(){int a=5,b;b=(++a)+(++a)+(++a);printf(

关于(++a)+(++a)+(++a)的问题该怎样思考?#include void main(){int a=5,b;b=(++a)+(++a)+(++a);printf("%d\n",b); }的运行结果是什么?在vc6.0上运行的结果为22,可是书上的结果却为24.这样的题该怎样思考呢?
关于(++a)+(++a)+(++a)的问题该怎样思考?
#include
void main()
{
int a=5,b;
b=(++a)+(++a)+(++a);
printf("%d\n",b);
}的运行结果是什么?在vc6.0上运行的结果为22,可是书上的结果却为24.这样的题该怎样思考呢?

关于(++a)+(++a)+(++a)的问题该怎样思考?#include void main(){int a=5,b;b=(++a)+(++a)+(++a);printf("%d\n",b); }的运行结果是什么?在vc6.0上运行的结果为22,可是书上的结果却为24.这样的题该怎样思考呢?
因为C语言没有规定表达式的求值顺序,视具体编译器而定:
涉及编译器对表达式的求值处理,如下:
1、微软系列的编译器:
只要表达式中有前置++,就先对++做处理,所以先做三次++,此时a=8,三个(++a)的返回值都是8,然后做加法,8+8+8=24
2、gcc编译器:
对于加法表达式,按照从左到右结合顺序
只要运算符两边有++,就先做++,所以先运算(++a)+(++a),返回值再+(++a).
做(++a)+(++a)时,先做两次++,此时a=7,返回7+7=14,然后做14+(++a);
此时a=8,然后做14+8=22;