网站导航 | 隐私政策 | 法律声明 | 加入收藏 | 设为首页 
 
关于我们
课程体系
我要报名
最新动态
教学视频
人才招聘
技术交流
访客留言
联系我们
 
在线咨询
余老师: 科锐教育在线咨询
袁老师: 科锐教育在线咨询
钱老师: 科锐教育在线咨询
方老师: 科锐教育在线咨询
李老师: 科锐教育在线咨询
 
友情链接
加密与解密-看雪学院 NE365论坛
安全365网站 第八军团
   
   
   
 
  测试你的C语言功底?

2、请运行下面的代码,观察结果,有人说怎么是死循环,你同意吗?为什么?

#include <stdio.h>
int main()
{
  int i = 0;
  int name[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  for (i = 0; i <= 10; i++)
  {
    name[i] = 0;
    printf("ok\n");
  }
  return 0;
}

例题二解答

我们一起来看一下此程序的反汇编:

在系统的实现中,i和数组name[10]是分配在栈上的变量,在内存中的分布如下图:

name[0]

name[1]

name[2]

name[3]

name[4]

name[5]

name[6]

name[7]

name[8]

name[9]

i(name[10])

从上图和表中可以看出i所占据的正是name[10]的位置,而name[10] = 0;这一句会被这样运行:
*(name + 10) = 0;
所以这一句的结果,就是把0赋值给i。这样一来在第11次循环的时候,i将会被重新置为0,那么循环结束的条件也就永远不会满足了,循环也就是个死循环了。

返回...
 
 
  科锐软件©2007.Copyright. All Rights Reserved
  办公地址:武汉市洪山区街道口埠华大厦1412B05