A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这个现象   有个什么合理的解释呢?


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

3 个回复

倒序浏览
字符‘a’是以ASCII码值储存在计算机中的一个常量,ASCII码值是97,以整型类型存储,占4个字节;
ch1是你定义的char类型的一个变量,所以是1个字节
回复 使用道具 举报
  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
回复 使用道具 举报
谢谢各位大侠的回答。。

我自己查了下资料。根据C99标准的规定,'a'叫做整型字符常量(integer character constant),为int型,故结果是4(对于32位机器);而ISO C++规定,'a'叫做字符字面量(character literal),为char型,故结果是1。C强调了'a'的“数”属性,而C++强调了'a'的“字符”属性。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马