char和指针的问题一直是我学了又忘的东西,故写下这篇博客做一个备忘录.
1.char和unsigned char之间的区别
unsigned char 是无符号字节型,char类型变量的大小通常为1个字节(1个字节=8个位),且属于整型。
相同点:在内存中都是一个字节,8位(2^8=256),都能表示256个数字
不同点:char的最高位为符号位,因此char能表示的数据范围是-128 ~ 127,unsigned char没有符号位,因此能表示的数据范围是 0 ~ 255
但是要把一个char类型的变量赋值给int、long等数据类型或进行类似的强制类型转换时时,系统会进行类型扩展,这时区别就大了。
对于char类型的变量,系统会认为最高位为符号位,然后对最高位进行扩展,即符号扩展:若最高位为1,则扩展到int时高位都以1填充。对于unsigned char类型的变量,系统会直接进行无符号扩展,即0扩展。扩展的高位都以0填充。
所以在进行类似的操作时,如果char和unsigned char最高位都是0,则结果是一样的;若char最高位为1,则结果会大相径庭。
2. unsigned char* 的用法
char *是字符串,以’/0’为结束符,unsigned char *是普通的指针;
1 | unsigned char *p; |
p = (unsigned char *)ZiFuKuTable;
是指将ZiFuKuTable的地址值强制性转换为无符号字节类型;
*p
是对该地址进行取值操作。