华为的面试题.简单几句话.却很震撼:)
来看看华为的面试题.简单几句话.却很有意思:)
下面这个程序执行后会有什么错误或者效果:
#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++下面.数组越界编译器已经不会报错了 .所以死循环是肯定的.把这道题发在上面.就是和大家讨论一下.这么简单的几句话都会有意想不到的效果.呵呵..想起了一篇叫"银弹"的文章.汗一把....
浙公网安备 33010602011771号