以下所有问题均为32位操作系统
#include <iostream>
#include <string>
using std::cout;
using std::endl;
using std::string;
//sizeof考点
//1.sizeof是运算符不是函数
//2.sizeof(void) 编译报错
class a{};//3. 1个字节在内存占位
class b
{virtual void f(){}
virtual void g(){}
};//4.虚指针
class c1
{
char a;
virtual void f(){}
};//5.对齐,char后填充3
class c2
{
double a;
virtual void f(){}
};//6.对齐,double前填充4
class c4
{
char a;
double b;
int c;
char d;
};//7.对齐
class c3
{
public:
c4 af;
int aa;
private:
};//8.对齐,只取基本类型,int后填充4
class d
{
char a:3;
char b:3;
char c:3;
char f:3;
char g:3;
};//9.位域,a和b在一个字节,c和f在一个字节,g是一个字节
int va=0;
int f()
{
va++;
return va;
}
void f2(int a[10])
{
cout<<sizeof(a)<<endl;//10.数组名作参数退化为指针
}
//11.不能求不完整的数组,此处无示例
int main()
{
cout<<"a:"<<sizeof(a)<<endl;
cout<<"b:"<<sizeof(b)<<endl;
cout<<"c1:"<<sizeof(c1)<<endl;
cout<<"c2:"<<sizeof(c2)<<endl;
cout<<"c4:"<<sizeof(c4)<<endl;
cout<<"c3:"<<sizeof(c3)<<endl;
cout<<"d:"<<sizeof(d)<<endl;
string e="aa";
cout<<sizeof(e)<<endl;//12.string的默认长度,不同编译器不同
cout<<sizeof(f())<<" "<<sizeof(va=va+1.1)<<" "<<sizeof(va+1.1)<<endl;//13.sizeof在编译时确定,函数与表达式不执行
cout<<va<<endl;
int vec[10]={0};
f2(vec);
}