黑马程序员技术交流社区

标题: i++,++i [打印本页]

作者: to_love    时间: 2015-8-22 14:14
标题: i++,++i
int b;
int a = 7;
b = (++a) + (a++);
   
printf("b=%d, a=%d\n", b, a);
作者: 小笼包    时间: 2015-8-22 15:11
b等于16,a等于9,
作者: tangbinbin    时间: 2015-8-22 19:48
b=15,a=8
作者: fersh    时间: 2015-8-22 21:37
b=16     a=9
作者: fersh    时间: 2015-8-22 21:38
int b;
int a = 7;
b = (++a) ;
b=b+ (a++);
   
printf("b=%d, a=%d\n", b, a);
结果跟上面是一样的
作者: 15132876050    时间: 2015-8-22 21:50
b=15   a=9
作者: MEIMEIAA    时间: 2015-8-22 22:07
b=16,a=9
作者: 彩虹直至黑白    时间: 2015-8-22 22:46
b = (++a) + (a++);
将这个拆分下,
++a 表达式的值是8(将a+1当作++a的值)
a++ 表达式的值是   (将a的值当作a++的值, 而此时a是8(前面传递过来) 所以a++是8 )
所以b=16
a=9
作者: 手心的温度    时间: 2015-8-22 23:51
b等于15,a等于9
作者: smilejoke    时间: 2015-8-23 08:04
b=16,a=9       8#的解释很清楚
作者: 你是我的小苹果    时间: 2015-8-23 08:33
++a 和 a++对a的作用一样都是相当于a+1,不一样的地方在于++a是先把a加1
再赋值,所以++a的值也是a+1,而a++是先赋值后加1,所以a++的值等于a;

所以b = (7+1)+ (7+1)= 16,a = 7 + 1 + 1 = 9.

作者: wanghui001001    时间: 2015-8-23 09:20
b = 16,a = 9
作者: 魏武    时间: 2015-8-23 09:35
16   9 无误
作者: to_love    时间: 2015-8-23 11:15
tangbinbin 发表于 2015-8-22 19:48
b=15,a=8

貌似不对,可以运行看看。a++,已经把a加成8了,所以8+8=16.
作者: tangbinbin    时间: 2015-8-24 10:59
应该是15,9吧,a++和++a表达是的值分别为7,8.视频讲义里面有这一块的联练习 呢,
作者: tr2e    时间: 2015-8-24 11:07
本帖最后由 tr2e 于 2015-8-24 11:11 编辑

有的人自己错了还一本正经的胡说八道
作者: tr2e    时间: 2015-8-24 11:10
就不能运行验证吗?

打脸专用.jpg (41.21 KB, 下载次数: 57)

打脸专用.jpg

作者: 15095185209    时间: 2015-8-24 14:05
学习了!顺序这个地方有点迷糊!
作者: leqoqo    时间: 2015-8-24 15:46
正在看运算符的优先级 ,你的这个应该无关,是赋值的先后
作者: tangbinbin    时间: 2015-8-24 18:23
to_love 发表于 2015-8-23 11:15
貌似不对,可以运行看看。a++,已经把a加成8了,所以8+8=16.

我怎么觉得是15.9呢,之前看视频讲义里面说a++和++a表达式的值不一样恩。
作者: tangbinbin    时间: 2015-8-24 18:39
16,9确实是正解,b=(++a)+(a++),  a=7,分析思路;
                                  1         2
表达式1的值8,此时a的值为8,进行下一步运算,a++中a的值为8了,,表达式的值也为8,所以,b=8+8=16,
a的值自增两次,即a=9.之前错误的理解了a++的值,忽略了运算顺序,当++a进行运算时,a值发生变化了,后面传递给++a时就发生变化了。
作者: jx836202365    时间: 2015-8-24 19:02
b=16,a=9。++a的值为8,a的值也为8,先变后用。a++的值为8,a变成9,想用后变。
作者: lf900827    时间: 2015-8-24 19:28
后面的输出是C语言的吧,a=9,b=16
作者: xuexiujuan_1991    时间: 2015-8-24 22:07
++a是先自加,再参与运算,所以++a等于8 ,a++是先参与计算再进行自加,所以a++等于8,所以b=16,最后a再自加一次,故a=9
作者: 翟宇浩    时间: 2015-8-27 22:06
b=16 a=9,因为++a的值为8,此时a的值为8,a++的值为8(因为前面的表达式将a的值修改为了8,a++为先返回表达式的值然后再进行计算),此时a的值为9
作者: huahaoL    时间: 2015-8-27 22:15
输出为:b=16,a=9
作者: 同舟ing    时间: 2015-8-27 22:50
b=16,a=9
作者: pyy061    时间: 2015-8-27 22:55
第一个++a,a=7+1=8,到a++,先用后加,所以相当于b=7+1+(7+1)=16,a在语句执行以后再+1=9
所以输出b=16,a=9
作者: ReoWei    时间: 2015-8-27 23:17
a加了两次,所以a为9,b为16,不过windows下和Mac,不同的系统编译器不同,所以,b的结果就不一样,学OC的话,就以Mac编译的为标准
作者: aidan    时间: 2015-8-29 10:43
i++  先使用i后自增,++i 先自增后使用i
作者: 王志志志    时间: 2015-8-29 10:44
a++先取值,b=16 a=9
作者: chunjiang    时间: 2015-8-29 12:15
b=16,a=9
作者: 颖峰    时间: 2015-8-29 21:06
等于15   加就先加
作者: flywithde    时间: 2015-8-29 23:33
分别是16、9
作者: XLX    时间: 2015-8-31 23:28
各位大神求解devc++软件运行结果为何会是如此?

额.jpg (124.59 KB, 下载次数: 66)

额.jpg

作者: veggiegfei    时间: 2015-9-1 00:04
始终记着不管是a++还是++a,a的值始终+1,a++表达式的值不加1,++a表达式的值+1.
作者: 麟子    时间: 2015-9-1 13:25
16,9
先执行++a       8
在实行a++       8          9
结果     8+8=16     a=9
作者: 唐肖虎    时间: 2015-9-1 16:42
b=9+7,a=9,++a,a自增之后的值,a++是a自增之前的值,,,
作者: coding_wang    时间: 2015-9-1 17:12
8楼正解~
作者: 羊口羊口羊    时间: 2015-9-2 00:19
a=7,++a表达式的值为8,a被赋值为8;a++表达式的值为8,a被赋值为9;所以b=16。输出:b=16, a=9




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2