黑马程序员技术交流社区

标题: 字符变量和字符常量所占内存大小?? [打印本页]

作者: 叶子哥    时间: 2016-4-19 21:07
标题: 字符变量和字符常量所占内存大小??
这个现象   有个什么合理的解释呢?


  1.         char ch1 = 'a';
  2.         printf("字节:%ld\n",sizeof(ch1));   //字节:1
  3.         printf("字节:%ld\n",sizeof('a'));     //字节:4
复制代码

作者: 烛风小糊涂    时间: 2016-4-19 22:26
字符‘a’是以ASCII码值储存在计算机中的一个常量,ASCII码值是97,以整型类型存储,占4个字节;
ch1是你定义的char类型的一个变量,所以是1个字节
作者: muzipiao    时间: 2016-4-19 22:53
  1. char ch1 = 'a';
  2. printf("字节:%ld\n",sizeof(ch1));   //字节:1
复制代码

这里字符常量长度为1,这个没有什么异议吧!
  1. printf("字节:%ld\n",sizeof('a'));     //字节:4
复制代码

这里,打印的长度为4,那是因为'a'就是ASCII码的97,这里XCode编译器把'a'理解为了97,是int类型,所以长度为4
  1. printf("a'length=%ld\n",sizeof((char)'a'));
复制代码

如果想打印为字符的长度,可强制转换一下,打印出来,字节:1
备注:不同编译器结果不同,C++编译器,下面的打印结果仍是1,那是因为C++编译器认为'a'是字符常量,XCode编译器认为'a'为整形常量97
作者: 叶子哥    时间: 2016-4-20 21:03
谢谢各位大侠的回答。。

我自己查了下资料。根据C99标准的规定,'a'叫做整型字符常量(integer character constant),为int型,故结果是4(对于32位机器);而ISO C++规定,'a'叫做字符字面量(character literal),为char型,故结果是1。C强调了'a'的“数”属性,而C++强调了'a'的“字符”属性。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2