老问题,关于for里面关于打印i的问题

一个萝卜三个坑 2014-08-12 08:14:40
#include<stdio.h>
int main()
{
int i;
for(i=0;i<10;i++)
{
printf("%d ",i);
}
for(i=0;i<10;++i)
{
printf("%d ",i);
}
return 0
}
打印出来的结果理论上是怎么样的?分析一下。
...全文
381 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
竹影半墙 2014-08-17
  • 打赏
  • 举报
回复
引用 24 楼 fxbszj 的回复:
[quote=引用 23 楼 misskissC 的回复:]
C++里面++i比i++高效;
C里无区别。

为什么在C语言里没有区别[/quote]


用一个变量,
竹影半墙 2014-08-17
  • 打赏
  • 举报
回复
引用 24 楼 fxbszj 的回复:
[quote=引用 23 楼 misskissC 的回复:]
C++里面++i比i++高效;
C里无区别。

为什么在C语言里没有区别[/quote]


gcc -g double_plus.c -o double_plus
objdump -dS double_plus


不知道这样可不可以说明这个...
fxbszj 2014-08-17
  • 打赏
  • 举报
回复
引用 23 楼 misskissC 的回复:
C++里面++i比i++高效; C里无区别。
为什么在C语言里没有区别
竹影半墙 2014-08-17
  • 打赏
  • 举报
回复
C++里面++i比i++高效; C里无区别。
竹影半墙 2014-08-17
  • 打赏
  • 举报
回复

所以运行结果是这样的:

  • 打赏
  • 举报
回复
在for里面没区别 不用分析
赵4老师 2014-08-13
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
lin5161678 2014-08-13
  • 打赏
  • 举报
回复
i++ 和 ++i 副作用完全一样 而这里只用到了 题目的副作用 所以没有区别
lin5161678 2014-08-13
  • 打赏
  • 举报
回复
引用 3 楼 u012501633 的回复:
C/C++语言定义(语言的参考手册)明确定义了顺序点的概念。顺序点位于: 1. 每个完整表达式结束时。完整表达式包括变量初始化表达式,表达式语句,return语句的表达式,以及条件、循环和switch语句的控制表达式(for头部有三个控制表达式); for里面没有顺序点,那打印的结果是不是意味着可能是0-9也可能是1-10呢?
for 成吨的序列点 你怎么会觉得for 没序列点呢
qq_16696537 2014-08-13
  • 打赏
  • 举报
回复
引用 7 楼 Baoge_leopard 的回复:
结果一样,只是前置加加效率比后置加加效率高一点
这是何解??
ybjx111 2014-08-13
  • 打赏
  • 举报
回复
引用 5 楼 u012501633 的回复:
[quote=引用 2 楼 lisong694767315 的回复:] 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
C/C++语言定义(语言的参考手册)明确定义了顺序点的概念。顺序点位于: 1. 每个完整表达式结束时。完整表达式包括变量初始化表达式,表达式语句,return语句的表达式,以及条件、循环和switch语句的控制表达式(for头部有三个控制表达式); [/quote] for的执行顺序是一定的 for(A ; B ; C) { D; } 它的执行顺序就是 A; B; D; C; A; B; D; C; .... 如果B为假就跳出。 你把你的函数带入上面看看会不会有区别。 只不过是C一个是i++一个是++i 对于一个单独的语句这两个的结果没有区别。
默伊清风 2014-08-13
  • 打赏
  • 举报
回复
引用 9 楼 qq_16696537 的回复:
[quote=引用 7 楼 Baoge_leopard 的回复:] 结果一样,只是前置加加效率比后置加加效率高一点
这是何解??[/quote] i++和++i的不同
night729 2014-08-13
  • 打赏
  • 举报
回复
没有区别的! 他们两个相当于~ int i = 0; for(;i<10;){ printf("%d'n", i); ++i; // a } 单独一条语句 前++ 和 后++ 没有任何区别! int i = 10; int a = i++; int b = ++i; 结果就是 a = 10, i = 12, b = 12; 就是这种用法 ~~~
赵4老师 2014-08-13
  • 打赏
  • 举报
回复
无profiler不要谈效率!!尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代!
赵4老师 2014-08-13
  • 打赏
  • 举报
回复
引用 15 楼 u011362822 的回复:
打印结果没区别,不过效率就有点区别了,++i 比 i++ 效率高点。 因为在i++情况下,编译器会用一个临时变量保存i的值,而++i就不会。 不过现在的很多编译器会优化,使这两种用法效率没区别。 详见:http://stackoverflow.com/questions/24886/is-there-a-performance-difference-between-i-and-i-in-c
对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步Debug版对应汇编一行! 单步Debug版对应汇编千行不如单步Release版对应汇编一行!
还差得远呢 2014-08-13
  • 打赏
  • 举报
回复
打印结果没区别,不过效率就有点区别了,++i 比 i++ 效率高点。 因为在i++情况下,编译器会用一个临时变量保存i的值,而++i就不会。 不过现在的很多编译器会优化,使这两种用法效率没区别。 详见:http://stackoverflow.com/questions/24886/is-there-a-performance-difference-between-i-and-i-in-c
  • 打赏
  • 举报
回复
调试跟踪可以解开你的疑问,实在不行看汇编代码。真正能搞明白,确实得如赵老师说的那样。
jlfzhz 2014-08-13
  • 打赏
  • 举报
回复
打印结果没有区别,但是,眼里看见的有区别。
默伊清风 2014-08-12
  • 打赏
  • 举报
回复
结果一样,只是前置加加效率比后置加加效率高一点
707wk 2014-08-12
  • 打赏
  • 举报
回复
引用 5 楼 u012501633 的回复:
可怜的娃,你是怎么了
加载更多回复(4)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧