码迷,mamicode.com
首页 > 编程语言 > 详细

C/C++ 结构体通过指针移位取值

时间:2014-10-10 15:15:24      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:指针   结构体   字符对齐   

代码示例:

int _tmain(int argc, _TCHAR* argv[])
{
#pragma pack(1)
    typedef struct{
        int a;
        char x;
        int y;
        char z[6];
    }AAA;
    printf("%d\n",sizeof(AAA));
    AAA a = {1,‘a‘,2,"bcdef"};
    AAA* pa = &a;
    int* test1        = (int *)(void *)pa;
    char* test2        = (char *)(void *)(test1+1);
    int* test3        = (int *)(void *)(test2+1);
    char* test4        = (char *)(void *)(test3+1);
    printf("%d ",*test1);
    printf("%c ",*test2);
    printf("%d ",*test3);
    printf("%s", test4);
    return 0;
#pragma pack()
}
编译器:visual studio2010

注意事项:
1、指针执行加减法,是将加减数值乘以该指针类型的大小作为移位的位数,因此需要强转为需要的类型
的指针类型作为运算数。
2、结构体内不能采用字符自动对齐,必须要用#pragma pack编译制导将对齐最小字符设为1才行,否则
偏移取值运算不能到达指定的位置


C/C++ 结构体通过指针移位取值

标签:指针   结构体   字符对齐   

原文地址:http://xkyxbdx.blog.51cto.com/3399377/1562012

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!