C++-为什么在用sizeof计算字符常量的字节数时,在C中值为4,而在C++中为1?
为什么在用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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
看下面两段代码:
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字节。
因为C语言中char类型会自动转换成int类型,int类型在你的电脑里显示的就是4个字节,而C++把它看成时一个char类型,所以是一个字节。。。你试试byte类型也是这种情况
这个是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