关于宏offsetof

博客介绍了Linux下C语言中宏的头文件和声明,给出测试代码,分析结构体struct s的内存占用情况,包括各成员所占字节数。重点阐述了offsetof宏用于计算结构体成员在首地址的偏移地址,如i、c、d、a成员的偏移地址分别为0、4、5、8。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
        struct s {
                int i;
                char c;
                char d;
                int a;
        };

        /* Output is compiler dependent */

        printf("offsets: i=%ld; c=%ld; d=%ld a=%ld\n",
                        (long) offsetof(struct s, i),
                        (long) offsetof(struct s, c),
                        (long) offsetof(struct s, d),
                        (long) offsetof(struct s, a));
        printf("sizeof(struct s)=%ld\n", (long) sizeof(struct s));

        exit(EXIT_SUCCESS);
}

宏的头文件和声明:

#include <stddef.h>

size_t offsetof(type, member);
 

先上测试代码,结构体struct s的结构如上,占用内存空间12个字节,其中i占4个字节,为了内存对齐,c和d占了4个字节,a占四个字节。

  1. offsetof(struct s, i)   表示i成员在结构体struct s首地址的偏移地址,为0
  2. offsetof(struct s, c) 表示c成员在结构体struct s首地址的偏移地址,为4
  3. offsetof(struct s, d) 表示d成员在结构体struct s首地址的偏移地址,为5
  4. offsetof(struct s, a) 表示a成员在结构体struct s首地址的偏移地址,为8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值