今天看了《C陷阱与缺陷》''和''的解释。 '' 引起的字符表示一个整数,其整数值对应于编译器使用的字符集中该字符的序列值。
由'' 引起的字符串表示指向未命名数组的起始字符的指针。我对这两个符号很好奇,于是我打开VS2010看看单引号和双引号括起来的字符在内存中是如何存储的。
实验方法非常简单。检查“yes”/“yes”/“ye”/“y”四个字符在内存中的存储格式。这是代码:
int _tmain(int argc, _TCHAR* argv[]){ char test1[]='yes'; int test2='ye'; int test4='y'; x\n', test4); 实验结果如下。
根据内存中的存储格式可知,以''组成的字符串是以整数形式存储的,第一个字符被识别为最高位,最后一个字符为最低位四个int 变量按此顺序存储为位。
带''的变量按照第一个字符存储在起始地址,最后一个字符存储在结束地址。
实验结果确认了《C陷阱与缺陷》这个描述,但是如果带“”的字符超过4个字节会怎样呢?运行另一个实验。这是代码:
int _tmain(int argc, _TCHAR* argv[]){ char test1[]='yes'; int test2='ye'; int test4='y'; x\n', test4); int test5('%x\n', test5);}实验结果如下。
实验结果显示字符超过4个字节,超出了int类型的存储能力。编译器报告错误,指出常量字符太多。这有效地通知程序员可能存在符号输入错误,但如果没有超出int 类型的存储容量,则允许接受所有指令而不进行提示。程序中存在误用符号和调试问题的潜在危险。日后会是一件相当麻烦的事情。
版权声明:本文由今日头条转载,如有侵犯您的版权,请联系本站编辑删除。