64位C编译器中sizeof行为不一致问题咨询
为什么
sizeof('3')的结果是4? 先看你的代码:
printf("Size of char = %d\n", sizeof(char)); printf("\n%d %d %d", sizeof('3'), sizeof("3"), sizeof(3));
输出结果:
Size of char = 1 4 2 4
核心原因很明确:在C语言里,单引号包裹的字符常量(比如'3'),它的类型是int,不是char。
sizeof(char)固定为1,这是C标准强制规定的,所以第一个输出完全符合预期。'3'作为字符常量,在C语言中会被当作int类型处理。64位编译器下int的大小通常是4字节,因此sizeof('3')返回4。"3"是字符串字面量,本质是包含字符'3'和末尾空终止符\0的char数组,总长度为2,所以大小是2字节。3是普通整数常量,类型为int,大小自然也是4字节。
如果换成C语言,字符常量的类型就是char,这时候sizeof('3')会返回1——这是C和C之间一个容易混淆的细节差异。
内容的提问来源于stack exchange,提问作者Obaid Majeed
相关产品推荐
相关产品推荐

