社区
C++ 语言
帖子详情
c++ 的一个基础问题
c_340705108
2011-09-19 02:13:12
#include <stdio.h>
void main()
{
int i=8;
printf("%d\n%d\n%d\n%d\n", ++i, --i, i++, i--);
}
这个程序的输出结果为什么是:8,7,8,8
谢谢你的回复!!
...全文
236
17
打赏
收藏
c++ 的一个基础问题
#include void main() { int i=8; printf("%d\n%d\n%d\n%d\n", ++i, --i, i++, i--); } 这个程序的输出结果为什么是:8,7,8,8 谢谢你的回复!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zairenjian_1
2011-09-20
打赏
举报
回复
这个输出结果是和编译器有关。
苍蝇①号
2011-09-20
打赏
举报
回复
编译器的问题
君子美玉
2011-09-20
打赏
举报
回复
应该是变参函数解析时候的问题,和逗号应该没什么关系
tt630630
2011-09-20
打赏
举报
回复
[Quote=引用 8 楼 eckael 的回复:]
vc
C/C++ code
int i=8;
printf("%d\t%d\t%d\t%d", ++i, i--, i--, i--);
结果9 8 8 8
觉得后置++ --不改变i的值,只有前置++ --起作用
[/Quote]
后置 ++ -- 是在程序运行完后才改变i的值。
赵4老师
2011-09-20
打赏
举报
回复
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
不要写连自己也预测不了结果的代码!
支持英文数字
2011-09-19
打赏
举报
回复
[Quote=引用 2 楼 cicigl 的回复:]
printf传进去的参数计算好像是从后往前的
i --,传进去8然后i = 7
i ++, 传进去7然后i = 8
++ i 和-- i 都是传进去的i的最终值,所以传进去的都是8
结果是8,8,7,8
[/Quote]以前没注意。现在注意了。
fmworld
2011-09-19
打赏
举报
回复
你debug跟踪一下就OK了哈。
FrankHB1989
2011-09-19
打赏
举报
回复
在ISO C99和ISO C++11中都是undefined behavior(ISO C++03有bug暂且不论),因为i相关的表达式产生超过一个没有明确被序列化的副作用。
就算不考虑这个问题(比如只是printf("%d\n%d\n", ++i, i;),结果也不确定,因为参数求值顺序是unspecified behavior,
在同一个编译器编译的同一个程序的不同位置都可以不同
,并且
这点和入栈顺序无关
(ISO C/C++管不了calling convention)。
翻越寒武
2011-09-19
打赏
举报
回复
[Quote=引用 8 楼 eckael 的回复:]
vc
C/C++ code
int i=8;
printf("%d\t%d\t%d\t%d", ++i, i--, i--, i--);
结果9 8 8 8
觉得后置++ --不改变i的值,只有前置++ --起作用
[/Quote]
说错了,后置++ --是改变了i的值,但printf只用了后置操作返回的临时值
最后i=6
翻越寒武
2011-09-19
打赏
举报
回复
vc
int i=8;
printf("%d\t%d\t%d\t%d", ++i, i--, i--, i--);
结果9 8 8 8
觉得后置++ --不改变i的值,只有前置++ --起作用
翻越寒武
2011-09-19
打赏
举报
回复
[Quote=引用 2 楼 cicigl 的回复:]
printf传进去的参数计算好像是从后往前的
i --,传进去8然后i = 7
i ++, 传进去7然后i = 8
++ i 和-- i 都是传进去的i的最终值,所以传进去的都是8
结果是8,8,7,8
[/Quote]
这样解释是不对的
c_340705108
2011-09-19
打赏
举报
回复
五楼是对的 是在vc下运行的 可是为什么呀 就是从右到左的话 也是:8,7,7,8 吧
blueboy82006
2011-09-19
打赏
举报
回复
跟编译器有关哦。
GCC结果应该是8 7 7 8
LZ那个8 7 8 8的结果要在VC下才能得到吧。
波特王子
2011-09-19
打赏
举报
回复
C/C++函数入栈顺序是自右向左的,从最右边开始计算
clannadgirl
2011-09-19
打赏
举报
回复
从右往左算,
8 7 7 8
cicigl
2011-09-19
打赏
举报
回复
printf传进去的参数计算好像是从后往前的
i --,传进去8然后i = 7
i ++, 传进去7然后i = 8
++ i 和-- i 都是传进去的i的最终值,所以传进去的都是8
结果是8,8,7,8
cocoabird
2011-09-19
打赏
举报
回复
是8,8,7,8 逗号表达式是从右向左运行的
C++
编程实例100篇
C++
编程实例100篇,里面有很多很
基础
的编程实例,可以作为参考。
Visual
C++
6.0编程实例精解完整版(PDF)
通过
一个
具体的工具软件——Ftp文件搜索工具的完整开发过程,由浅入深、循序渐进、全面系统地介绍了 Microsoft Visual C++6.0
基础
知识和常用技巧。全书共分 10章,详细讲解了 Visual
C++
的基本语法知识及其主要的...
C语言大全第4版+源码(PDF)
本书是“C:The Complete Beference”的第四版。在第一版问世以来的几年中,程序设计领域已经发生了很大变化。Internet和World Wide Web已成为计算领域一道亮丽的风景,Java已经开发出来,
C++
也已标准化。与此同时,新的C标准(称为C99)也已制订。尽管C99并没有被大肆炒作,但它确实是过去5年里计算领域中最重要的
一个
事件。在历史的洪流中,人们很容易只注意那些新的事物,而忽视了用以构筑未来的坚实
基础
。C语言正是这样的
基础
。世界上的许多程序代码是在C上运行的。
C++
正是在此
基础
上建立的,其语法构成了Java的
基础
。然而,如果C仅是其他语言的起点,它就会成为有趣但却遭到遗弃的语 注: 原文件大小:15499 KB
C++
入门
基础
知识总结(2022整理)
一、
C++
入门
基础
知识之什么是
C++
? 1982年,Bjarne Stroustrup博士在C语言的
基础
上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为
C++
。因此:
C++
是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行面向对象的程序设计。 PDF版、
C++
资料教程、
C++
电子书籍获取 关注微信公众号:“ C和C加加 ” 回复关键字:“
C++
”即可领取 二、
C++
入门
基础
..
c++
超详细
基础
教程(快速入门)
c++
超详细
基础
教程
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章