• 计算结构体成员的大小及偏移地址


    #include "stdafx.h"
    #include <stdio.h>
    #define PACKVALUE 4
    #pragma pack(push)
    #pragma pack(PACKVALUE)        
    typedef struct
    {
            char sa;
            double sb;
            int sc;
    } innerS;
     
    typedef struct
    {
            int a;
            char b;
            short c;
            innerS d[2];
    } testS;
     
    #pragma pack(pop)
     
    typedef unsigned long dword;
     
    #define FSIZE(type, field) sizeof(((type*)0)->field)
    #define FPOS(type, field) ((dword) & ((type*)0)->field)
    //有人可能对宏定义里面的那个0不理解,你把它理解成NULL就对了 
    
    
    int main(int argc, char* argv[])
    {
    printf("#pragma pack(%d):\nsizeof(char)=%d; sizeof(short)=%d; sizeof(int)=%d; sizeof(double)=%d\n\n",
                            PACKVALUE, sizeof(char), sizeof(short), sizeof(int), sizeof(double));
     
            printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, a), FPOS(testS, a));
            printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, b), FPOS(testS, b));
            printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, c), FPOS(testS, c));
            printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, d), FPOS(testS, d));
            printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, d[0]), FPOS(testS, d[0]));
            printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, d[0].sa), FPOS(testS, d[0].sa));
            printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, d[0].sb), FPOS(testS, d[0].sb));
            printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, d[0].sc), FPOS(testS, d[0].sc));
            printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, d[1]), FPOS(testS, d[1]));
            printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, d[1].sa), FPOS(testS, d[1].sa));
            printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, d[1].sb), FPOS(testS, d[1].sb));
            printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, d[1].sc), FPOS(testS, d[1].sc));
            return 0;
    
    }
  • 相关阅读:
    transform 多值先后执行顺序
    css 清除浮动
    鼠标移动到图片,图片放大
    js 事件循环机制EventLoop
    web安全
    web前端踩坑记录
    滚动加载图片(懒加载)
    css 兼容问题
    模块化 AMD与CMD 规范
    css 盒子模型 ie盒子模型
  • 原文地址:https://www.cnblogs.com/sankye/p/2982191.html
Copyright © 2020-2023  润新知