int a=6,b;b=a+++a++;
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/11 12:56:11
int a=6,b;b=a+++a++;
结果中 a的值为8 为何b的值为12 而不是13?
结果中 a的值为8 为何b的值为12 而不是13?
编译器不一样,结果不一样,你的编译器应该是这样 b=(a++)+(a++),2个a的值先使用在自加,所以才是12
再问: 两个括号中的后自增应该是有先后顺序的,否则a的值也不会是 8; 根据+号的结合性(从左到右), 应该是前面的a++ 运算后,与 后面的 a++表达式的值进行加法、 也就是 b= 6+ 7 , 第一个a++运算后,a的值应该是7 ,第二个a++运算后,a的值变为8 。
再答: 这是编译器的原因,它统一将表达式里的值都先用原来的值使用运算,在自加
再问: y=(x++)+(x++); 如果写成这样的话,按道理应该是先把括号里面的表达式计算出来之后再加法运算吧。 可是y的值仍然是12。 VC6.0 和C-FREE下的结果。
再答: 12不就对了吗,++在后面,先使用值在自加,两个x++的值都是6
再问: 两个括号执行应该是有先后顺序的。 也就是说 两个括号里面的表达式值并不都是 6 啊。
再答: 不是说了吗,编译器统一先使用值在进行自加,其实就是y=6+6,x++作用只是改变x的值
再问: 那是不是可以理解为,有时候编译器并没有完全遵循语法在执行。 我仍然死板地认为 两个括号里面的表达式是应该先执行的。。然后才去做加法运算。
再答: 说了编译器不一样,结果不一样,你也别太纠结这问题,我看过一本叫C陷进与缺陷的书,挺不错了,上面有说各类问题
再问: 两个括号中的后自增应该是有先后顺序的,否则a的值也不会是 8; 根据+号的结合性(从左到右), 应该是前面的a++ 运算后,与 后面的 a++表达式的值进行加法、 也就是 b= 6+ 7 , 第一个a++运算后,a的值应该是7 ,第二个a++运算后,a的值变为8 。
再答: 这是编译器的原因,它统一将表达式里的值都先用原来的值使用运算,在自加
再问: y=(x++)+(x++); 如果写成这样的话,按道理应该是先把括号里面的表达式计算出来之后再加法运算吧。 可是y的值仍然是12。 VC6.0 和C-FREE下的结果。
再答: 12不就对了吗,++在后面,先使用值在自加,两个x++的值都是6
再问: 两个括号执行应该是有先后顺序的。 也就是说 两个括号里面的表达式值并不都是 6 啊。
再答: 不是说了吗,编译器统一先使用值在进行自加,其实就是y=6+6,x++作用只是改变x的值
再问: 那是不是可以理解为,有时候编译器并没有完全遵循语法在执行。 我仍然死板地认为 两个括号里面的表达式是应该先执行的。。然后才去做加法运算。
再答: 说了编译器不一样,结果不一样,你也别太纠结这问题,我看过一本叫C陷进与缺陷的书,挺不错了,上面有说各类问题
#include int max(int a,int b,int c){\x05a=a>b?a :b ;\x05retu
void func(int *a,int b[]){b[0]=*a+6;}main(){int a,b[5];a=0;b
int a,b; b = a >>
有如下程序 int runc(int a,int b) { return(a+b);} main( ) { int x=
#include int func(int a,int b) { int c; c=a+b;return c; } ma
#includeint a(int x);int b(int y);int main(){int m,n;n=6;m=a
#include int b=3; int fun(int *a) { b+=*a; return(b); }
int fm(int a,int b) {if(b==1)return a; else return a+fm(a,b-
#include func(int a,int b) {int c; c=a+b; return c;} main()
#include func(int a,int b){int c; c=a+b;returnc;}main(){intX
英语翻译#include#includevoid Euclid(int a,int b){int r;r=a%b;if(
英语翻译int a;std::cin>>a;int b;std::cin>>b;int value=a;int pow=