总结一句话:c++中的结构除了默认是共有属性外,计划和类一样,而c的结构体没有
对比 | c的结构体 | c++的结构体 |
函数 | 不允许有函数 | 允许有成员函数 1.允许有构造函数、析构函数和this指针 2.允许这个函数是虚函数 |
权限 | 访问权限只能是public | C++允许public,private,protected三种 |
继承 | 不允许 | 允许 |
C/C++结构体占用内存大小问题!
计算struct占用的内存大小需要考虑两点:一是各个分量的偏移地址的计算,二是最终整体大小要进行地址对齐(为了确保结构的大小为结构的字节边界数(即该结构中占用最大空间的类型所占用的字节数)的倍数,所以在为最后一个成员变量申请空间后,还会根据需要自动填充空缺的字节)。
struct{
char a[15]; //占15个字节,从0开始偏移,所以下面的int是从15开始偏移
int x;//偏移量 0x15+1=16
}s1;
cout<<sizeof(s1)<<endl; //结果为20字节
struct{
char a[15]; //
int x; //偏移量 16字节
char b; //偏移量 21字节
}s2; //结果为21字节,按最大基本类型对齐,补充到24字节
cout<<sizeof(s2)<<endl; //结果为24字节
struct{
char a[15];
int x; //偏移量 16字节
double b; //double偏移量必须为8的倍数,故偏移量24字节
}s3;//
cout<<sizeof(s3)<<endl; //结果为32字节
struct{
char a[15];
int x; //偏移量 16字节
double b; //偏移量 24字节
char c;//偏移量 32字节
}s3;//共33字节,按最大基本类型对齐,补充到40字节(整除8)
cout<<sizeof(s3)<<endl; //结果为40字节