黑马程序员技术交流社区

标题: 关于sizeof [打印本页]

作者: HMCC    时间: 2015-3-18 11:23
标题: 关于sizeof
求教一下 下面代码的输出结果
#include <stdio.h>

int main()
{
     int size = sizeof 'a' ;
     printf("size=%d\n", size);
     return 0;
}

为啥输出结果是size=4. ‘a'不是字符类型吗 为啥不是1.求指教
作者: 佩玉鸣    时间: 2015-3-18 11:37
应该跟'a'的类型有关系,现在应该是unicode编码。
作者: Yishan    时间: 2015-3-18 11:41
C99标准的规定,'a'叫做整型字符常量(integer character constant),被看成是int型,所以在32位机器上占4字节。

ISO C++标准规定,'a'叫做字符字面量(character literal),被看成是char型,所以占1字节。
来源http://www.cnblogs.com/dolphin0520/archive/2011/04/04/2005089.html

作者: yyx1992    时间: 2015-3-18 11:51
#include <stdio.h>

int main()
{
char c='a';
     int size = sizeof (c) ;
     printf("size=%d\n", size);
     return 0;
}
这样应该就对了,明确告诉编译器,这是一个字符!
备注:sizeof'a'相当于sizeof'65',65默认整形,所以是4个字节

作者: HMCC    时间: 2015-3-18 13:46
yyx1992 发表于 2015-3-18 11:51
#include

int main()

为什么  sizeof'a'相当于sizeof'65'   谢谢
作者: Reliable    时间: 2015-3-18 14:13
#include <stdio.h>

int main()
{
     int size = sizeof 'a' ;  //这里程序把'a'看成他的的ASSIC值,所以最终是一个数字而不是字母
     printf("size=%d\n", size);
     return 0;
}
作者: 417284911    时间: 2015-3-18 14:53
sizeof 'a' 会转换成ASSIC值,,等价于 sizeof 97  ,
int类型,结果是4
作者: 枫宇翔    时间: 2015-3-18 15:02
sizeof是计算字节数的,int型数据在不同的编译器下字节数不同,因为通过sizeof就可以求出该数据类型在当前环境下的字节数,如果你对是字符但输入不是1疑惑,那是因为赋值运算符右边数据的数据类型会被转换成左边数据的类型,你可以将左边改为char型,那就是1了
作者: HMCC    时间: 2015-3-18 17:51
谢谢大家啦
作者: 舒少勇    时间: 2015-3-18 19:00
是的 但是你把a当成int 类型了 所以 这个时候字符a 会自动转换成数字97  int类型在计算机中占4个字节 所以结果是4
作者: Theshy    时间: 2015-3-18 21:59
'a'  会转化为ASSIC码   


作者: bibabo88    时间: 2015-3-18 22:04
代码不长,知识高深




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