C和C++中的字符大小是多少?据我所知,char的大小在C和C++中都是1个字节.
在C:
#includeint main() { printf("Size of char : %d\n", sizeof(char)); return 0; }
在C++中:
#includeint main() { std::cout << "Size of char : " << sizeof(char) << "\n"; return 0; }
没有惊喜,它们都给出了输出: Size of char : 1
现在我们知道,字符表示为'a'
,'b'
,'c'
,'|'
,...所以我只是修改了上面的代码对这些:
在C:
#includeint 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++中:
#includeint 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'
实际上是一个是int
,具有4的大小(或一些其它的实现相关的值).在C++中,类型是char
,大小为1.这是两种语言之间的许多小差异之一.
正如Paul所说,这是因为它'a'
是int
C中的C而不是char
C++.
我在几年前写的一些内容中介绍了C和C++之间的具体差异,网址为:http://david.tribble.com/text/cdiffs.htm
在C中,字符文字的类型是C++ 中的int和char.这是在C++中支持函数重载所必需的.看这个例子:
void foo(char c) { puts("char"); } void foo(int i) { puts("int"); } int main() { foo('i'); return 0; }
输出:
char
在C语言中,字符文字不是一种char
类型.C将字符文字视为整数.所以,sizeof('a')
和之间没有区别sizeof(1)
.
因此,sizeof字符文字等于C中的sizeof整数.
在C++语言中,字符文字是类型char
.该cppreference说的:
1)窄字符字面或普通字符文字,例如
'a'
或'\n'
或'\13'
.这样的文字具有类型char
,并且值等于执行字符集中的c-char的表示.如果c-char不能表示为执行字符集中的单个字节,则文字具有int类型和实现定义的值.
所以,在C++中,字符文字是一种类型char
.所以,C++中字符文字的大小是一个字节.
Alos,在您的程序中,您使用了错误的格式说明符给sizeof
运算符.
C11§7.21.6.1(P9):
如果转换规范无效,则行为未定义.275)如果任何参数不是相应转换规范的正确类型,则行为未定义.
所以,你应该使用%zu
格式说明符代替%d
,否则它是C中未定义的行为.