#pragma pack(n)的use(看编辑)

#include <stdio.h>
#include <stdlib.h>
#pragma pack(8)
struct S1
{
    short a;
    long b;
};

struct S2
{
    char c;
    struct S1 d;
    double e;
};

int main(void)
{
    struct S2 s20;

    printf("sizeof(struct S1) = %d\n",sizeof(struct S1));

    printf("sizeof(struct S2) = %d\n",sizeof(struct S2));


    printf("(int)&s20.d-(int)&s20.c = %d\n",(int)&s20.d-(int)&s20.c);

    printf("(int)&s20.e-(int)&s20.d = %d\n",(int)&s20.e-(int)&s20.d);

    printf("Hello World!\n");
    return 0;
}

输出:
这里写图片描述


S1
变量 类型大小 pack 起始地址 大小 空出
a 2 8 0 2[0,1]
2[2,3]
b 4 8 4 4[4,5,6,7]


S2
变量 类型大小 pack 起始地址 大小 空出
c 1 8 0 1[0]
3[1,2,3]
d 4 8 4 8[4,5,6,7,8,9,10,11]
4[12,13,14,15]
e 8 8 16 8[16,17,18,19,20,21,22,23]


结构体数据类型,就不能取其大小,而要取结构体中用过的对齐数中最大的一个,即4。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值