关于由结构体首地址算其内部的一些变量时所用的偏移和CONTAINING_RECORD宏

来源:互联网 发布:数据库排序 编辑:程序博客网 时间:2024/06/08 15:01

如果定义一个结构体A,用其定义一个变量a,我们由a访问结构体中变量时,有时候会直接想到用"&a+30"(此时30是偏移字节),事实上并不是在&a上加30,应将&a进行以下强转例如:“(char *)&a+30”,最好是在获得地址后将其转成char*类型的,因为char*是单字节的。

其实,结构体内部变量的地址,不止跟其相对于结构体首地址有关,还跟整个工程的结构体字节对齐方式有关,关于对齐方式:#pragma pack(n)可用这个进行设置

对齐方式的相关问题可以上网上搜,很多的

一些相关的网页:

结构体字节对齐:

http://www.cnblogs.com/longlybits/articles/2385343.html

点击打开链接

由结构体变量地址求首地址:

http://bbs.csdn.net/topics/390480780

点击打开链接

宏CONTAINING_RECORD 详解.doc(关于结构体这个问题的)

http://pan.baidu.com/s/1tELvf

点击打开链接