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

在C和c++中字符的大小是多少?据我所知,在C和c++中char的大小都是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++中返回不同的值?

341949 次浏览

在C语言中,字符常数(如'a')的类型实际上是int,其大小为4(或其他依赖于实现的值)。在c++中,类型为char,大小为1。这是两种语言之间的许多小差异之一。

正如Paul所说,这是因为'a'在C中是int,而在c++中是char

我在几年前写的:http://david.tribble.com/text/cdiffs.htm中提到了C和c++之间的具体区别

在C语言中,字符字面量的类型是c++中的int字符。这在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 character literal等于C中的sizeof integer。

c++语言,字符文字类型为charcppreference表示:

1) <强>窄字符字面值或普通字符字面值,例如'a''\n''\13'。这样的字面值类型为char,值等于 执行字符集中c-char的表示形式。如果c-char是 不能表示为执行字符集中的单个字节 字面量有int类型和实现定义的值

因此,在c++中character literal是一种char类型。因此,c++中字符字面量的大小是一个字节。

另外,在你的程序中,你为sizeof操作符使用了错误的格式说明符。

C11§7.21.6.1 (p9):

如果转换规范无效,则行为为 类型的任何参数不是正确的类型 对应的转换规范,行为未定义。

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