• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Raul.c
博客园    首页    新随笔    联系   管理    订阅  订阅

华为的面试题.简单几句话.却很震撼:)

来看看华为的面试题.简单几句话.却很有意思:)  
   
  下面这个程序执行后会有什么错误或者效果:  
    #define   MAX   255
    int   main()  
  {  
        unsigned   char   A[MAX],i;  
        for   (i=0;i<=MAX;i++)  
              A[i]=i;  
  }

这个居然是华为的面试题?

乍看很简单,可是问题往往就出现在最简单的环节中。

还是来解释一下吧...  
  MAX=255    
  数组A的下标范围为:0..MAX-1,这是其一..  
  其二.当i循环到255时,循环内执行:  
      A[255]=255;  
  这句本身没有问题..但是返回for   (i=0;i<=MAX;i++)语句时,  
  由于unsigned   char的取值范围在(0..255),i++以后i又为0了..无限循环下去.  
  呵呵..华为的题还真是考人..不过瞒有意思的..一不小心就有陷井.表面上看简单两句话.没有什么错.  

 想说的就是像这样一个简单的循环,乍一看怎么也不会有错,考的就是unsigned   char   值范围这些东东.    
      关于调试,在VC++下面.数组越界编译器已经不会报错了   .所以死循环是肯定的.把这道题发在上面.就是和大家讨论一下.这么简单的几句话都会有意想不到的效果.呵呵..想起了一篇叫"银弹"的文章.汗一把....

posted @ 2009-10-28 16:45  Raul.c  阅读(749)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3