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 ++中是int和char 。 这是用C ++来支持函数重载 。 看到这个例子:
void foo(char c) { puts("char"); } void foo(int i) { puts("int"); } int main() { foo('i'); return 0; }
输出:
char
在C语言中 ,字符文字不是char
types。 C将字符字面量视为整数。 因此, sizeof('a')
和sizeof(1)
之间没有区别。
所以,字符文字的大小等于C中的整数sizeof
在C ++语言中 ,字符文字是字符types。 相关的说法是:
1) 窄字符或普通字符,如
'a'
或'\n'
或'\13'
。 这样的文字具有char
types ,其值等于执行字符集中c-char的表示。 如果c-char在执行字符集中不能表示为单个字节,则该文字具有inttypes和实现定义的值。
所以,在C ++中字符文字是一种char
。 所以,C ++中字符文字的大小是一个字节。
Alos,在你的程序中,你使用了sizeof
运算符的错误格式说明符。
C11§7.21.6.1(P9):
如果转换规范是无效的,则行为是不确定的.275) 如果任何参数不是相应转换规范的正确types,则行为是不确定的。
所以,你应该使用%zu
格式说明符而不是%d
,否则在C中是未定义的行为。