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语言中 ,字符文字不是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中是未定义的行为。