C中空格的sizeof

img


#include <stdio.h>
#include <string.h>
int main()
{
    char a=' ';
    printf("%d\n",sizeof(a));
    printf("%d\n",sizeof(" "));
    printf("%d\n",sizeof(' '));
}

第一个printf是字符型的空格 占一个ASCII,这样理解对吗
第二和第三个printf分别是因为什么输出的2和4啊

第一个类型是char,所以是1个byte,这没问题
第二个类型是string,所以空格后面还有个不可见字符\0,所以是2bytes
第三个是字符型常量,常量占4字节

你应该是理解sizeof运算符得含义,站在这个基础上理解你得问题。
sizeof是c语言得操作符,求得是对象所申请得内存大小。
sizeof(a)结果是1 是因为a是char类型,对应得内存大小是1 (char在操作系统中1个字节的内存)
sizeof(" ")结果是2,你要知道 “ ”的含义,这是c字符串的知识,c字符串默认以'\0'结尾,这里应该是const char *类型 长度为2才能存下,所以这个申请内存应该大小为2,sizeof的结果就为2
至于sizeof(' '),我在vs上测试的时候结果是1,同上的理解, 你的运行结果是4,可能是他识别成存储一个字符的地址的大小了(所有的指针大小都是4)

个人理解,谨慎参考~

img

char:1
\0:2
空格字符:4