C++-为什么在用sizeof计算字符常量的字节数时,在C中值为4,而在C++中为1?

发布于 2016-10-18 17:34:36 字数 697 浏览 1316 评论 3

为什么在用sizeof计算字符常量的字节数时,在C中值为4,而在C++中为1?例如,sizeof('A'),在C中是4,在C++中试1

In C :

#include <stdio.h>
int main(){
char a = 'a';
printf("Size of char : %dn",sizeof(a));
printf("Size of char : %dn",sizeof('a'));
return 0;
}
Output :

Size of char : 1
Size of char : 4

In 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;
}
Output :

Size of char : 1
Size of char : 1
为什么sizeof('a')返回的值在C与C++中是不同的?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

虐人心 2017-04-29 16:20:30

看下面两段代码:

C语言:

char a = 'a';
sizeof(char) = 1;
sizeof(a) = 1;
sizeof('a') = 4;

C++语言:

char a = 'a';
sizeof(char) = 1;
sizeof(a) = 1;
sizeof('a') = 1;

字符型变量是1字节这个没错,奇怪的是C语言认为'a'是4字节,而C++语言认为'a'是1字节。
原因如下:
C99标准的规定,'a'叫做整型字符常量(integer character constant),被看成是int型,所以在32位机器上占4字节。
ISO C++标准规定,'a'叫做字符字面量(character literal),被看成是char型,所以占1字节。

偏爱自由 2017-03-22 13:31:28

因为C语言中char类型会自动转换成int类型,int类型在你的电脑里显示的就是4个字节,而C++把它看成时一个char类型,所以是一个字节。。。你试试byte类型也是这种情况

虐人心 2017-01-06 15:20:11

这个是ISO C和ISO C++的一个区别。
In C, character literals such as 'a' have type int, and thus sizeof('a') is equal to sizeof(int).

In C++, character literals have type char, and thus sizeof('a') is equal to sizeof(char).
参考链接:
http://david.tribble.com/text/cdiffs.htm#C99-char-literal
http://stackoverflow.com/questions/2172943/size-of-character-a-in-c-c

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文