求教struct结构体成员变量的有关问题。多谢

求教struct结构体成员变量的问题。谢谢。求教一个struct的问题,程序源码如下:C/C++ code#include iostream

求教struct结构体成员变量的问题。谢谢。
求教一个struct的问题,程序源码如下:
 

C/C++ code
    #include <iostream>#include <string>using namespace std;union Packed{    char i;    short j;    int k;    long l;    float f;    double d;};struct MyInfo {    char i;    // 1    short j;  // 2    int k;     // 4    long l;   // 4    float f;  //  4    double d;  //8};int main(){    cout<<"sizeof(Packed)="<<sizeof(Packed)<<endl;    cout<<"sizeof(MyInfo)="<<sizeof(MyInfo)<<endl;  //一共是23个字节,输出确实24个字节。    return 0;}    

  不明白的地方,通过测试,struct结构体里面每个成员变量的大小都已求出,一共是23个字节,为何输出的时候是24个字节?另,若是把struct结构体里面的成员全部注释掉,sizeof()求出的大小为1,也就是说,里面没有任何内容,它让占有一个字节,为何?
  我只知道C++中类中的成员变量,有个叫对齐的操作,目的就是方面计算,提高运算效率,struct结构体有这么一说么?

[解决办法]
struct的内存分配你需要了解

利用位域声明可以节省结构体内存使用率


Google struct 位域
[解决办法]
结构和类都存在对齐的问题。在你这个结构中i后面有一个填充字节。当结构和类没有数据成员时,为了区分不同的实例,编译器会为它们分配一个字节的内存。