社区
C++ 语言
帖子详情
一个超简单的C++选择题?
achiever1992
2011-12-28 08:21:47
"#include<iostream.h>
void main( )
{
int i=5,k;
k=(++i)+(++i)+(i++);
cout<<k<<' '<<i<<endl;
}"
A、24 8 B、21 8 C、21 7 D、24 7
为什么选B呢?
++i和i++具体有什么区别,要有例子解释,通俗
...全文
438
38
打赏
收藏
一个超简单的C++选择题?
"#include void main( ) { int i=5,k; k=(++i)+(++i)+(i++); cout<<k<<' '<<i<<endl; }" A、24 8 B、21 8 C、21 7 D、24 7 为什么选B呢? ++i和i++具体有什么区别,要有例子解释,通俗
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
38 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xsniper001
2011-12-29
打赏
举报
回复
顶8楼的,看汇编,汇编很清纯
Zoelov
2011-12-29
打赏
举报
回复
i++和++i的区别在于先自增还是后自增,比如当i=2时,a = ++i; 运算完后结果是i=3 a = 3;因为++i是先自增然后再把值赋给a,所以他们都是3;对于a = i++;结果是i = 3,而a = 2;因为,这个i后自增,先把i的值赋给了a然后i自增,所以a=2 i=3;
对于你这个题不管是i++还是++i都是一样的,因为你加了括号,所以要先运算括号中的内容,运算结果是(6)+(7)+(8)=21而i=8
luliily
2011-12-29
打赏
举报
回复
i++是先使用i的值,再自加
++i是先自加,再使用i的值
我学C/C++的时候老师就是这样说的,你先读点代码,遇到多了也就很快理解了
blinwen
2011-12-29
打赏
举报
回复
一楼说的很好,很通俗
hondely
2011-12-29
打赏
举报
回复
20 8 吧
iamnobody
2011-12-29
打赏
举报
回复
http://topic.csdn.net/u/20110826/09/601ebe9c-c2ae-4d63-a4e2-506c618bb654.html?10206
今天第四次贴这个链接了,,,,不要看老谭的书,害人不浅!!!!!!!!!!!!!
fyk810888
2011-12-29
打赏
举报
回复
七楼的哥们,照你那样解释也应该是6+7+7,最后调用i的时候才是8,现在的计算机教育真坑爹,这种问题好无意义。。。不同的C++系统输出结果不一样,建议看看裘老关于这方面的解释。。。
老孬斌
2011-12-29
打赏
举报
回复
i++是 i=i i=i+1
++i是 i=i+1 i=i
Enter空格
2011-12-29
打赏
举报
回复
这种问题,反汇编是解决之本。
牙牙学语
2011-12-29
打赏
举报
回复
这种东西很无聊呀,很无聊
iamnobody
2011-12-29
打赏
举报
回复
楼主怎么还不结呢???见10楼链接..
不要看老谭的书!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
jijiyuyisheng
2011-12-29
打赏
举报
回复
应该是20 8
不过感觉这种题目很无聊的。都TM找抽
苹果皮
2011-12-29
打赏
举报
回复
[Quote=引用 4 楼 shenandyi 的回复:]
为什么不是 20,8 呢??
[/Quote]
我也以为是20,8 !!!!
卡卡_苏米
2011-12-29
打赏
举报
回复
哎 这都是没事找事干的
AlburtHoffman
2011-12-29
打赏
举报
回复
这个表达式的求值在C/C++中是未定义的,具体的求值过程见具体的编译器实现。
楼主可以认真阅读下面这篇文章
《C/C++中的表达式求解和序列点概念》
一般来说,不推荐在一个表达式中使用两个以上的自增自减操作符。那样的表达式基本上是未定义的。
超级僵尸
2011-12-29
打赏
举报
回复
i=3,m=3;
j=(++m)-(++m);
k=(++i)+(++i);
输出结果是i=5,m=5,j=0,k=0
i=3,m=3,n=3;
j=(++m)-(++m)+(++m);
p=(++n)*(++n)*(++n);
k=(++i)+(++i)+(++i);
输出结果是i=6,m=6,n=6,j=6,p=150,k=16
个人分析:平级的++i是两个同时算的(可能与加减乘除是双目运算有关,算完之后再算第三个。所以前两个相同,都是5,第三个是6。
比如S=A+B+C+D
先算S1=A+B,S=S1+C+D
然后S2=S1+C,S=S2+D
即从左到右两个运算一次,因为加减乘除都是双目运算,所以两个进行一次运算
k=(7+7)+(i++)=14+(i++)=14+7=21;同时算前两个++i,i立即变为7,i++在这条语句后变为8
帅得不敢出门
2011-12-29
打赏
举报
回复
无意义的问题呀
楼主是自寻烦恼
而且为什么还有一堆的人也跟着?
10楼 链接 为标准答案。
achiever1992
2011-12-29
打赏
举报
回复
谢谢各位踊跃发言,这种2B题目确实很坑爹。。。
wangjieest
2011-12-29
打赏
举报
回复
[Quote=引用 27 楼 zoelov 的回复:]
i++和++i的区别在于先自增还是后自增,比如当i=2时,a = ++i; 运算完后结果是i=3 a = 3;因为++i是先自增然后再把值赋给a,所以他们都是3;对于a = i++;结果是i = 3,而a = 2;因为,这个i后自增,先把i的值赋给了a然后i自增,所以a=2 i=3;
对于你这个题不管是i++还是++i都是一样的,因为你加了括号,所以要先运算括号中的内容,运算结果是(6)+……
[/Quote]
括号能作为i++的分割点么?
KK_Liang
2011-12-29
打赏
举报
回复
这个正解。
1. ++i //i 为6
2. 第二个++i // i为7
3. (++i)+(++i) 和为14 ,i值为7
4. 最后(i++) 与14和为21 i值加1 为8
最后结果 k 值为21 i值为8
7楼的兄弟,不能把括号内的值一个一个算完在相加,虽然结果很想。++无视括号的
[Quote=引用 14 楼 yuan512341959 的回复:]
4: int i=5,k;
00401058 mov dword ptr [ebp-4],5 [ebp-4] = 5
5: k=(++i)+(++i)+(i++);
0040105F mov eax,dword ptr [ebp-4] eax = 5
00401062 add eax,1 eax = 6
00401065 mov d……
[/Quote]
加载更多回复(18)
c
c++
笔试 面试题
超
多
超
经典
c
c++
笔试 面试题
超
多
超
经典c
c++
笔试 面试题
超
多
超
经典c
c++
笔试 面试题
超
多
超
经典c
c++
笔试 面试题
超
多
超
经典c
c++
笔试 面试题
超
多
超
经典
西南交通大学程序设计基础
C++
期末复习资料
超
级全面.zip
西南交通大学程序设计基础
C++
期末复习资料
超
级全面,包含
选择题
和编程题
C++
语言基础视频教程
C++
语言基础视频培训课程:本课与主讲者在大学开出的程序设计课程直接对接,准确把握知识点,注重教学视频与实践体系的结合,帮助初学者有效学习。本教程详细介绍
C++
语言中的封装、数据隐藏、继承、多态的实现等入门知识;主要包括类的声明、对象定义、构造函数和析构函数、运算符重载、继承和派生、多态性实现等。课程需要有C语言程序设计的基础(可以利用本人开出的《C语言与程序设计》系列课学习)。学习者能够通过实践的方式,学会利用
C++
语言解决问题,具备进一步学习利用
C++
开发应用程序的基础。
c/
c++
笔试题 java 笔试题 笔试题整理组合 物
超
所值
最近因为找工作,里面包含了我最近两个月找工作收集的所有C/
C++
语言java方面的面试题以及部分答案。现在新工作搞定了,决定把这些资料发出来,送给有需要的朋友,免得再象我一样到处搜寻,实在辛苦。格式我已经给整理好了,方便打印,内容大家可以有选择的参考。如果把里面所有的东东都搞懂,找工作时候笔试应该不成问题的。里面部分答案不保证百分百正确,大家可以做参考。
一道
超
经典的
C++
结构体的题目
以下小编就为大家介绍一道
超
经典的关于
C++
结构体的题目。需要的朋友可以过来参考下
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章