C和C++中的字符大小是多少?据我所知,char的大小在C和C++中都是1个字节.
#include <stdio.h>
int main()
{
printf("Size of char : %d\n", sizeof(char));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
#include <iostream>
int main()
{
std::cout << "Size of char : " << sizeof(char) << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
没有惊喜,它们都给出了输出: 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;
}
Run Code Online (Sandbox Code Playgroud)
Size of char : 1
Size of char : 4
Run Code Online (Sandbox Code Playgroud)
在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;
}
Run Code Online (Sandbox Code Playgroud)
Size of char : 1
Size of char : 1
Run Code Online (Sandbox Code Playgroud)
为什么sizeof('a')在C和C++中返回不同的值?
小智 333
在C中,一个字符的类型恒定像'a'实际上是一个是int,具有4的大小(或一些其它的实现相关的值).在C++中,类型是char,大小为1.这是两种语言之间的许多小差异之一.
Dav*_*ble 25
正如Paul所说,这是因为它'a'是intC中的C而不是charC++.
我在几年前写的一些内容中介绍了C和C++之间的具体差异,网址为:http://david.tribble.com/text/cdiffs.htm
Smi*_*ith 17
在C中,字符文字的类型是C++ 中的int和char.这是在C++中支持函数重载所必需的.看这个例子:
void foo(char c)
{
puts("char");
}
void foo(int i)
{
puts("int");
}
int main()
{
foo('i');
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
char
Run Code Online (Sandbox Code Playgroud)
在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中未定义的行为.
| 归档时间: |
|
| 查看次数: |
268705 次 |
| 最近记录: |