总结一句话: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字节
C与C++结构体内存解析
本文详细对比了C和C++中结构体的差异,包括函数、权限和继承等方面,并探讨了C++结构体的成员函数、访问权限和继承特性。同时,重点介绍了C/C++结构体在内存占用上的计算规则,如偏移地址计算和地址对齐策略,通过实例展示了如何影响结构体的总大小。
337






