本文主要是介绍关于由结构体首地址算其内部的一些变量时所用的偏移和CONTAINING_RECORD宏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
如果定义一个结构体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
点击打开链接
这篇关于关于由结构体首地址算其内部的一些变量时所用的偏移和CONTAINING_RECORD宏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!