#define题目

1、计算结构体成员偏移量:成员的地址与结构体初始地址的差值,结构体成员对齐数:取成员自身字节数与编译器默认的对齐数的较小值。

#include <stdio.h>
#define OFFsiet(name,member) &(((name*)0)  ->member)
//假设结构体的初始地址为0,将0强制转化为结构体指针                              
//在64位系统中不能将地址(指针,数字)转化为int类型、十六进制等等
//故不能是#define OFFsiet(name,member) (int)&(((name*)0)  ->member)
struct shu{
                              
    char c;
    int a;
    char b;
};
int main()
{
    printf("%x", OFFsiet(shu,b));
    return 0;
}

2、

#include <stdio.h>
#include <string.h>

int main() {
    unsigned char a[4];
    struct weiduan {
        unsigned char c;
        unsigned char c1: 1;
        unsigned char c2: 2;
        unsigned char c3: 3;
    } *shu;
    shu = (weiduan *) a;
    memset(a, 0, 4);
    shu->c = 2;
    shu->c1 = 3;
    shu->c2 = 4;
    shu->c3 = 5;
    //指定占m个比特位(位段变量)被赋值的时候,超位就从右到左截取m个比特位,作为变量值。
    for (int i = 0; i < 4; i++) {
        printf("%02x ", a[i]);
    }
    return 0;
}
//结果: 02 29 00 00
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务