本文收集了《程序员面试宝典》和《C和C++程序员面试秘籍》中的关于sizeof的题目,让大家一次性解决sizeof问题
1.使用sizeof计算普通变量所占空间的太小
char str[] = "Hello";
char *p = str;
int n = 10;
sizeof(str)=
sizeof(p)=
sizeof(n)=
void Func (char str[100])
{
sizeof(str)=
}
void *p = malloc(100)
sizeof(p)=
解答:
- 对数组变量做sizeof运算得到的是数组占用内存的总大小,加上数组中有一个元素’ ‘所以为6
- p为指针变量,n为int型变量。在32位平台下,指针和int都是4个字节,所以结果为4
- str为函数的参数,调用函数Func(str)是 地址传递,所以str是一个指针来指向数组,所以结果为4
- p还是一个指针,所以还是4
2.使用sizeof计算类对象所占空间大小
#include <iostream.h>
clsaa A
{
public:
int i;
};
class B
{
public:
char ch;
};
class C
{
public:
int i;
short j;
};
class D
{
public:
int i;
short j;
char ch;
};
class E
{
public:
int i;
int ii;
short j;
char ch;
char chr;
};
class F
{
public:
int i;
int ii;
int iii;
short j;
char ch;
char chr;
};
int main()
{
cout<<sizeof(int)<<endl;
cout<<sizeof(short)<<endl;
cout<<sizeof(char)<<endl;
cout<<endl;
cout<<sizeof(A)<<endl;
cout<<sizeof(B)<<endl;
cout<<sizeof(C)<<endl;
cout<<sizeof(D)<<endl;
cout<<sizeof(E)<<endl;
cout<<sizeof(F)<<endl;
return 0;
}
解答:在32位操作系统环境下,char占一个字节,int占4个字节,short占2个字节
sizeof(A) = 4;
sizeof(B) = 1;
sizeof(C) = 4+2=6;
sizeof(D) = 4+2+1=7;
sizeof(E)= 24+21+2=12;
sizeof(F)= 34+21+2+2=15;
实际的结果却是:
sizeof(A) = 4;
sizeof(B) = 1;
sizeof(C) = 8;
sizeof(D) = 8;
sizeof(E)= 12;
sizeof(F)= 16;
主要原因是由于字节对齐