一个关于C语言中++a的问题
#include<stdio.h>main(){inta=5;inti=(++a)+(++a)+(++a);printf("i=%d\n",i);}这个结果为什么是22,...
#include <stdio.h>
main()
{
int a = 5;
int i = (++a)+(++a)+(++a);
printf("i=%d\n",i);
}
这个结果为什么是22,请分析一下。 展开
main()
{
int a = 5;
int i = (++a)+(++a)+(++a);
printf("i=%d\n",i);
}
这个结果为什么是22,请分析一下。 展开
2个回答
展开全部
(++a)+(++a)+(++a);
这种表达式的写法是很不好的,因为其结果是未定义的,不同的编译器得到的结果可能不一样。所以不建议这样写,而且对其讨论没有意义,因为你也不知道会得到什么答案。答案有可能是22,也有可能是24。因为都没有错。
为什么是22?
因为你的编译器是这样处理的,
首先,对a自增,a就是6
再对a自增,这时a就是7
然后相加,注意相加的不是6和7,而是7和7,因为a就是内存的一块,不可能既是6又是7,这时结果是14
再对a自增,a就是8了,然后14+8=22。
在CSDN上有个帖子是讨论这个问题的,你可以找找。讨论的结果就是,这种表达式没有任何意义。
这种表达式的写法是很不好的,因为其结果是未定义的,不同的编译器得到的结果可能不一样。所以不建议这样写,而且对其讨论没有意义,因为你也不知道会得到什么答案。答案有可能是22,也有可能是24。因为都没有错。
为什么是22?
因为你的编译器是这样处理的,
首先,对a自增,a就是6
再对a自增,这时a就是7
然后相加,注意相加的不是6和7,而是7和7,因为a就是内存的一块,不可能既是6又是7,这时结果是14
再对a自增,a就是8了,然后14+8=22。
在CSDN上有个帖子是讨论这个问题的,你可以找找。讨论的结果就是,这种表达式没有任何意义。
展开全部
首先++a是在用a前就被加了,a++则是在整个语句结束之后之后加的
int a=2
“printf("%d,%d\n",a,++a);”为什么是3,3而不是2,3呢 printf是从后往前看参数的,++a,a=3,再执行输出。
“printf("%d,%d\n",++a,a);”为什么是3,2而不是3,3呢 同理,先看到a,则a=2,然后看到++a,a=3,输入。
“printf("%d,%d\n",a,a++);”为什么是2,2,而不是2,3 先看到a++,但++要再整个语句结束之后++,所以a 都输出2
“printf("%d,%d\n",a++,a);”为社么是2,2,而不是3,3 先看到a,再看到a++,但是要在语句结束之后加
int a=2
“printf("%d,%d\n",a,++a);”为什么是3,3而不是2,3呢 printf是从后往前看参数的,++a,a=3,再执行输出。
“printf("%d,%d\n",++a,a);”为什么是3,2而不是3,3呢 同理,先看到a,则a=2,然后看到++a,a=3,输入。
“printf("%d,%d\n",a,a++);”为什么是2,2,而不是2,3 先看到a++,但++要再整个语句结束之后++,所以a 都输出2
“printf("%d,%d\n",a++,a);”为社么是2,2,而不是3,3 先看到a,再看到a++,但是要在语句结束之后加
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询