在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;
}
毫无疑问,它们都给出了输出: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语言中,字符字面值不是char类型。C将字符字面值视为整数。因此,sizeof('a')和sizeof(1)之间没有区别。
因此,sizeof character literal等于C中的sizeof integer。
在c++语言中,字符字面值是char类型。cppreference是这样的:
1)窄字符字面值或普通字符字面值。“一个”或
'\n'或'\13'。这个字面值的类型是char,值等于
执行字符集中c-char的表示形式。如果c-char是
不能表示为执行字符集中的单个字节
Literal有int类型和实现定义的值。
在c++中,character literal是一种char类型。因此,c++中字符字面量的大小是一个字节。
另外,在你的程序中,你对sizeof运算符使用了错误的格式说明符。
C11§7.21.6.1 (p9):
如果转换规范无效,则行为为
类的任何参数不是正确的类型
对应的转换规范,行为未定义。
因此,您应该使用%zu格式说明符而不是%d,否则在C中这是未定义的行为。
在C语言中,字符字面值不是char类型。C将字符字面值视为整数。因此,sizeof('a')和sizeof(1)之间没有区别。
因此,sizeof character literal等于C中的sizeof integer。
在c++语言中,字符字面值是char类型。cppreference是这样的:
1)窄字符字面值或普通字符字面值。“一个”或
'\n'或'\13'。这个字面值的类型是char,值等于
执行字符集中c-char的表示形式。如果c-char是
不能表示为执行字符集中的单个字节
Literal有int类型和实现定义的值。
在c++中,character literal是一种char类型。因此,c++中字符字面量的大小是一个字节。
另外,在你的程序中,你对sizeof运算符使用了错误的格式说明符。
C11§7.21.6.1 (p9):
如果转换规范无效,则行为为
类的任何参数不是正确的类型
对应的转换规范,行为未定义。
因此,您应该使用%zu格式说明符而不是%d,否则在C中这是未定义的行为。