您的位置:首页 > 职场人生

关于unsiged char 的一个面试题

2010-11-24 22:11 381 查看
刚才在孙晓亮的博客上看到一道C语言面试题,说是一个小问题,但我在看完标题之后都感觉出来他要考察变量类型表示越界问题了,因为以前在电脑鼠的算法程序中有过类似的问题,当时姚司还问过,但当时没想出来,后来才恍然大悟的。下面把这道题贴出来大家一块看看吧。首先声明一下:写这个不是为了装B,本人C语言功底不好,写出来只为大家共同分享,已经看过的人就不需要再看了。

#include <stdio.h>
#define MAX 255

int main()

{
unsigned char a[256],i;

for(i=0;i<=MAX;i++)
a[i]=i;
for(i=0;i<=MAX;i++)
printf("%d ",a[i]);
}
大家看看有什么错误?这个问题错误比较隐蔽,不仔细一点是看不出来的。

可能有的人已经看出来了,我来给大家解释一下吧,错误在于unsigned char 这个数据类型,它占了一个字节(8位),表示的数据范围是0~255(00000000~11111111,八位);当i=255; i++ ;因为 i本身是unsigned char类型,占8位,所以此时i+1变成了100000000 9位,又因为i只能占8位,所以舍掉了最高位,此时的i值又变成00000000了,即就是0;也就是这时i的值变为0了,然后就从i=0开始重新开始循环,最后一直循环下去成了死循环了。
不信大家可以去做一下这个实验,运行一下下面这个程序:

#include <stdio.h>

int main()

{
unsigned char i=0;

printf("/n%d /n",--i);
i=255;
printf("/n%d /n",++i);

}

这个例子就充分说明了越界问题。通俗地讲越界会使变量的值会“从一个极端走向另外一个极端”。

总是一句话:基础很重要,我们得打好基础。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: