c++ 结构体大小

#include<iostream>
using namespace std;

int main(){
    struct {
        char firstname[25];
        char mi;
        char lastname[25];
        int score;
    }A;

    cout << sizeof(A) << endl;

    return 0; 
}

为什么是56呢?

阅读 3.8k
3 个回答

一个变量的地址必须是其自身长度的整数倍。
firstname,mi和lastname都是char类型,一共占用51个字节,即偏移地址为0~50;
接下来是一个int,int是4字节,其偏移地址必须为4的整数倍,所以偏移地址为52~55(52是第一个大于50的能被4整除的数字);
至于中间的第51这个字节,就是俗称的padding,是个浪费掉的填充字节;
所以整个结构体占用的地址为0~55,共56个字节

结构体对齐,但是一般都比较容易理解!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题