C / C ++中字符的大小('a')

C和C ++中字符的大小是多less? 据我所知在C和C + +字符的大小是1个字节。

在C:

#include <stdio.h> int main() { printf("Size of char : %d\n",sizeof(char)); return 0; } 

在C ++中:

 #include <iostream> int main() { std::cout<<"Size of char : "<<sizeof(char)<<"\n"; return 0; } 

没有意外,他们都给出了输出: Size of char : 1

现在我们知道字符表示为'a''b''c''|' ,…所以我只是修改了上面的代码到这些:

在C:

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

输出:

 Size of char : 1 Size of char : 4 

在C ++中:

 #include <iostream> int main() { char a = 'a'; std::cout<<"Size of char : "<<sizeof(a)<<"\n"; std::cout<<"Size of char : "<<sizeof('a')<<"\n"; return 0; } 

输出:

 Size of char : 1 Size of char : 1 

为什么sizeof('a')在C和C ++中返回不同的值?

在C中,像'a'这样的字符常量的types实际上是一个int ,它的大小是4(或其他一些依赖于实现的值)。 在C ++中,types是char ,大小为1.这是两种语言之间的许多小差异之一。

正如保罗所说,这是因为'a'是C中的一个int ,而是C ++中的一个char

我在几年前写的东西中介绍了C和C ++之间的特定区别: http : //david.tribble.com/text/cdiffs.htm

在C中,字符文字的types在C ++中是intchar 。 这是用C ++来支持函数重载 。 看到这个例子:

 void foo(char c) { puts("char"); } void foo(int i) { puts("int"); } int main() { foo('i'); return 0; } 

输出:

 char 

在C语言中 ,字符文字不是chartypes。 C将字符字面量视为整数。 因此, sizeof('a')sizeof(1)之间没有区别。

所以,字符文字的大小等于C中的整数sizeof

在C ++语言中 ,字符文字是字符types。 相关的说法是:

1) 窄字符或普通字符,如'a''\n''\13' 这样的文字具有chartypes ,其值等于执行字符集中c-char的表示。 如果c-char在执行字符集中不能表示为单个字节,则该文字具有inttypes和实现定义的值。

所以,在C ++中字符文字是一种char 。 所以,C ++中字符文字的大小是一个字节。

Alos,在你的程序中,你使用了sizeof运算符的错误格式说明符。

C11§7.21.6.1(P9):

如果转换规范是无效的,则行为是不确定的.275) 如果任何参数不是相应转换规范的正确types,则行为是不确定的。

所以,你应该使用%zu格式说明符而不是%d ,否则在C中是未定义的行为。