C语言联合体union占用空间大小问题

联合体占用空间大小要遵循两个原则:

  1. 大小要足够容纳下所有成员的大小,也就是找到占用空间最大的元素
  2. 占用空间最大的元素大小要可以被所有共用体成员类型整除开
  3. 如果元素大小不可以被共用体某一个成员的类似整除开,必须添加空白自己,直到可以被共用体所有成员类型整除开。 例: Union U1{ Char a[9]; //占用9字节 Int b; // 占用4字节 Double c; //占用8字节 } 此时共用体大小为16,其中最大占用空间为9,其各成员类型占用空间为1,4,8,但是此时9无法整除4,8,所以必须添加空白字节,将大小添加为16,既可以整除1,4,8。 Union U2{ Char a[7];//占用7字节 Int b; //占用4字节 Double c; //占用8字节 } 此时共用体占用大小8字节,其中最大占用空间为8,其各成员类型占用空间大小为1(7),4,8,所以8可以被1,4,8整除,所以大小为8. Union U3{ Char a; //占用1字节 Int b[3]; //占用12字节 Double c; //占用8字节 } 此共用体占用空间大小为16,最大占用空间为12,其各成员类型占用空间大小围殴1,4(3),8,此时12无法整除8,所以添加空白字节,添加到16,此时可被所有类型整除,所以大小为16.
经验分享 程序员 微信小程序 职场和发展