内存对齐(C语言问题)

牛客网试题:传送门

//在x86系统下,sizeof如下结构体的值是多少?
struct{ 
char a[10];
int b;
short c[3];
}

解析:

struct{ 
char a[10];  //10字节,补齐以后占12字节
int b;       //4字节
short c[3];  //6字节,补齐后占8字节
}            //总共:12+4+8 = 24

图示内存对齐:
图示

类似题目:

typedef struct list_t{
struct list_t *next;
struct list_t *prev;
char data[0];
}list_t;

参考:传送门

#

struct MyStruct
{
    int i;
    char c;
    struct InnerStruct
    {
        int i;
        long l;
        double d;
        char c;
    } innerStruct;
};
union MyUnion
{
    int i;
    char c;
};
int main()
{
   printf("%d, %d", sizeof(MyStruct), sizeof(MyUnion));
}

1、关于结构体大小问题
遵循两条原则:
一、结构体变量中成员的偏移量必须是成员(基本数据类型)大小的整数倍;

什么是偏移量?结构体名代表结构体起始地址,结构体成员的首地址都是构体起始地址 + 偏移地址

二、结构体大小必须是所有成员大小的整数倍。
三、结构体中如果有结构体,把内部结构体打开即可,遵守上述规则一二
1、关于共用体大小问题
共用体大小与其中成员最大大小一致

所以,上题答案:32,4

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值