此程序为什么不是死循环?

dieyoung 2003-01-13 11:51:59
#include "stdio.h"
main()
{
int *p,a[5]={1,2,3,4,5};
p=a;
for (;p<p+5;p++)
printf("%d ",*p);
printf("\n");
}
...全文
38 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
tuxw 2003-01-16
  • 打赏
  • 举报
回复
确实不是死循环,当P的地址溢出时会退出循环
Zark 2003-01-14
  • 打赏
  • 举报
回复
是谁说这不是死循环的,站出来.
zd_net 2003-01-14
  • 打赏
  • 举报
回复
显然是死循环,直到p超出分配的内存范围!
tuxw 2003-01-14
  • 打赏
  • 举报
回复
改为
for (;p<a+5;p++)
tuxw 2003-01-14
  • 打赏
  • 举报
回复
p<p+5总是为真,p++不影响前面的逻辑表达式
Zark 2003-01-14
  • 打赏
  • 举报
回复
DS:FFFF 这只是16位系统中为了能读扩展内存而采取的方法.有32位系统中DS的含义已发生变化,已采用线性寻址,所以lw549的解释是不完全正确的.

理论上来说这就是个死循环,在实际上,由于EXCEPTION机制,所以在MS的VC下将出现0xC0000005非法访问例外,然后程序中断.如果您一定认为死循环是光标在那里闪啊闪没有尽头,在下也可以举双脚赞同这不是个"死循环".
langziji 2003-01-14
  • 打赏
  • 举报
回复
好象我说错了。
cocodou 2003-01-14
  • 打赏
  • 举报
回复
这个程序是不是你做梦想出来的?
考试是不会出的
langziji 2003-01-14
  • 打赏
  • 举报
回复
#include "stdio.h"
main()
{
int *p,a[5]={1,2,3,4,5};
p=a;
for (;p>p+5;p++)
printf("%d ",*p);
printf("\n");
}
//这样就是死循环了。p<p+5好象永远为真吧,所以for语句的循环次数为0,可以试试的。
sdik 2003-01-14
  • 打赏
  • 举报
回复
什么是死循环?
就是没有控制语句吗?
你的显然没有。不管是否中止他都是没有被控制。
中止也是硬件的问题。
同意lw549(呆子)的看法
delphihero 2003-01-14
  • 打赏
  • 举报
回复
就是死循环,不多指针访问非法地址早晚会被系统中止
hehe214 2003-01-14
  • 打赏
  • 举报
回复
厉害 啊
widewave 2003-01-14
  • 打赏
  • 举报
回复
p + 5数组越界,*p访问非法地址。
aLargeSea 2003-01-14
  • 打赏
  • 举报
回复
我同意lw549(呆子)的看法
web_spider 2003-01-14
  • 打赏
  • 举报
回复
最终,以内存不能读宕掉。
zhanghk 2003-01-14
  • 打赏
  • 举报
回复
up
马志1993 2003-01-14
  • 打赏
  • 举报
回复
up
俞庆平 2003-01-14
  • 打赏
  • 举报
回复
lw549(呆子) 不呆啊。呵呵。
lw549 2003-01-14
  • 打赏
  • 举报
回复
知道了.
p为DS:XXXX
p+5当然就是DS:XXXX+5了
XXXX的最大值为FFFF
如果XXXX+5>FFFF,就会溢出
因此p<p+5就为假了.
lw549 2003-01-14
  • 打赏
  • 举报
回复
真的不是死循环.
我试过了.
想想看.

69,382

社区成员

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

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