问个c语言的问题

2019-07-21 07:04发布

struct data
{
        int a;
        float b;
        double c;
        char d;
}student;

再把sizeof(student)打印出来,为什么是24,不应该是 4 + 4 + 8 + 1 = 17 吗?

顺便问句有什么好的c论坛


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
秋天
1楼-- · 2019-07-21 11:41
本帖最后由 秋天 于 2018-12-6 17:14 编辑

4+4+8+1=17,但是要是8的倍数,所以后面补7个字节=24
龙井茶
2楼-- · 2019-07-21 15:40
我好想是觉得应该是4+4+8+4 = 20:  具体解析请百度结构体对齐
路人曦
3楼-- · 2019-07-21 19:50
 精彩回答 2  元偷偷看……
szczyb1314
4楼-- · 2019-07-21 21:27
本帖最后由 szczyb1314 于 2018-12-6 16:58 编辑

你可以指定编译器按照你想要的字节对齐
#pragma pack(1)
struct data
{
        int a;
        float b;
        double c;
        char d;
}student;
#pragma pack()
sizeof(student)就等于17了,用#pragma pack(1)指定1字节对齐
#pragma pack(n)指定n字节对齐
GuDuDeRen
5楼-- · 2019-07-22 01:39
本帖最后由 GuDuDeRen 于 2018-12-6 17:31 编辑

这里涉及到结构体字节的对齐。4+4+8+8=24
struct data{
    int a;
    char d;
    short b;
}student1;   sizeof(student1)=4+2+2=8;
struct data{
    char c;
    int a;
    short b;
}student2;  sizeof(student1)=4+4+4=12;    (1)最大字节的整数倍  (2)最大字节对齐

一周热门 更多>