unsigned char 的一个面试题
来源:互联网 发布:淘宝上怎么样买东西呢 编辑:程序博客网 时间:2024/06/10 01:50
今天面试看到这么一个题。错误很隐蔽。。。分享出来大家看看;
#include<stdio.h>
#define MAX 255
int main() {
unsigned char a[MAX],i;
for(i=0;i<=MAX;i++)
a[i]=i;
for(i=0;i<=MAX;i++)
printf("%d ",a[i]);
}
看看有什么错误? 这个问题错误很隐蔽。。。
这个问题能将面试者的能力分为三类;
一:没错。。。那么说明面试者的C语言基础能力不行;
二:有个错,是哪个i<=MAX; 数组下标越界。。嗯,还行;
三:死循环,C的基本功很强。。达到了该题的测试目的;
分析了一下:
出现了两个问题;
一:下标越界可以说是个问题,但不是问题的本质; 当i=MAX;即i=MAX是,对数组来说,255是越界了,那如果我把数组下标改了是不是就对了呢?比如说如下:
#include <stdio.h>
#define MAX 255
int main() {
unsigned char a[256],i;//这里改成256是不是就对了呢? 还是不对;
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,八位); 当改成256后,虽说看似数组下标没越界,但是当i=255; i++ ;因为 i本身是unsigned char类型,占8位,所以此时i+1变成了100000000 9位,又因为i只能占8位,所以舍掉了最高位,此时的i值又变成00000000了,即就是0;然后就成了死循环了。。。
错误多少有点隐蔽。。。。呵呵
#include
#define MAX 255
int main() {
unsigned char a[MAX],i;
for(i=0;i<=MAX;i++)
a[i]=i;
for(i=0;i<=MAX;i++)
printf("%d ",a[i]);
}
看看有什么错误? 这个问题错误很隐蔽。。。
这个问题能将面试者的能力分为三类;
一:没错。。。那么说明面试者的C语言基础能力不行;
二:有个错,是哪个i<=MAX; 数组下标越界。。嗯,还行;
三:死循环,C的基本功很强。。达到了该题的测试目的;
分析了一下:
出现了两个问题;
一:下标越界可以说是个问题,但不是问题的本质; 当i=MAX;即i=MAX是,对数组来说,255是越界了,那如果我把数组下标改了是不是就对了呢?比如说如下:
#include <stdio.h>
#define MAX 255
int main() {
unsigned char a[256],i;//这里改成256是不是就对了呢? 还是不对;
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,八位); 当改成256后,虽说看似数组下标没越界,但是当i=255; i++ ;因为 i本身是unsigned char类型,占8位,所以此时i+1变成了100000000 9位,又因为i只能占8位,所以舍掉了最高位,此时的i值又变成00000000了,即就是0;然后就成了死循环了。。。
错误多少有点隐蔽。。。。呵呵
0 0
- unsigned char 的一个面试题
- 关于unsiged char 的一个面试题
- unsigned char 的值
- unsigned char 的使用
- char, signed char, unsigned char的区别
- char、signed char、unsigned char的区别
- 一个面试题,很基础,却有很多东西可以挖掘+char*+char[]+与char*[]++char(*[])
- 一道关于signed和unsigned的微软面试题
- 一道面试题(求一个unsigned int 数的二进制表示中有多少个1?)
- 面试题一: char * 和 char[]的比较
- QString unsigned char* 的转换
- unsigned char 数据类型的赋值
- char和unsigned的区别
- unsigned char与char的区别
- unsigned char与char的区别
- unsigned char与char的区别
- unsigned char与char的区别(转)
- char与unsigned char的区别
- springmvc在启动工程的时候就访问数据库,加载一些共同的数据
- 在MyEclipse中怎么使选中的一段代码下移一行,用快捷键
- 第12周项目3-用递归函数求解--汉诺塔问题
- 李白喝酒
- 万年历打印
- unsigned char 的一个面试题
- Lua快速介绍
- 写链表时的问题——函数参数
- 零基础学嵌入式开发
- socket编程(TCP)
- 将Android程序部署至真实Android手机以及asm.jar的运行
- 算法导论-第四章-分治策略:最大子数组C++实现
- Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能
- Android 2.0以后的Contacts API--ContactsContract