c字符存储大小问题:

    char ch = 'a';
    printf("%d\n", sizeof(ch));
    printf("%d\n", sizeof('a'));

输出结果是:

img


两个的区别是什么?

在C标准中:
char 和 字符变量属于字符常量,大小当然是1。
‘a’被称作整形字符常量(integer character constant),相当于是int类型,故为4。

c语言中字符常量是指由一对单引号括起来的单个字符,如“ 'a'”、“'D'”、“'?'”、“'$'”;它代表ASCII字符集中的一个字符,在内存中占4个字节,存放的是字符的ASCII码(整型数据)。C语言规定所有字符常量都作为整型量来处理。

用sizeof(类型名)是准确的做法
用sizeof(值)不太合适 ,因为你可能不确定这个值默认用什么类型存储。
就像你这个一样,char在C/C++中是一个字节,这是明确的。
但'a',1,9.95这样的字符、整数和浮点数,你可能不知道它默认的存储类型。
sizeof('a')在C代码下(后缀为.c),值为4,而在C++代码下(后缀为.cpp),值为1
sizeof(1)等于4,sizeof(9.95)等于8,也就是说,整数默认存储类型为int,浮点数默认存储类型为double

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632