申明:此文仅针对作者在笔试过程中遇到过的问题,不做全面总结。结果均经过32位平台验证。
1、基本数据类型
常见的基本数据类型有void、bool、char、int、short(int)、long(int)、float、double、long long、long double等。同类型有符号与无符号所占字节数相同,故在此不做区分。
类型 | 大小 |
void | 0 byte |
bool | 1 byte |
char | 1 byte |
short(int) | 2 bytes |
long(int) | 4 bytes |
int | 4 bytes |
float | 4 bytes |
double | 8 bytes |
long long | 8 bytes |
long double | 8 bytes |
2、指针
在32位机器下,指针的大小是4字节。
下面有个例子,
char* str="string";
sizeof(str)=_______
我们通常想到的答案是6或者是7。以为要求的是字符串的大小,但其实,str是一个字符指针,答案应该是4。
3、字符串
求字符串的大小时,很容易出错。因为常常会忽略字符串都是以"\0"结尾的。
上面那个例子,如果改为
char str[]="string";
sizeof(str)=_______
那么正确答案应该是7。
但是如果指定了字符串的长度,例如
char str[10]="string";
sizeof(str)=_______
那么答案则是10。
如果指定的字符串的长度小于字符串本身的长度,则会出错。
char str[6]="string";
sizeof(str)=_______
在VS2010下,提示错误,数组界限溢出。
4、结构体
struct A
{
int a;
char b;
float c;
double d;
};
sizeof(A)=_______
在默认对齐方式下,答案为24。
5、类
class B
{
int b;
B();
~B();
};
sizeof(B)=_______
答案为4。计算方式与结构体相同。
6、函数
等于函数返回值的大小。