在转换不同大小的结构体指针时理解内存结构

  • 本文关键字:指针 结构 内存 结构体 转换
  • 更新时间 :
  • 英文 :

struct A //size 4
struct B //size 8
unsigned char *mem; 
A *a=(A *)mem; 
B *b=(B *)a+sizeof(A); //I want address of b to be 4

如果我说错了,请纠正我:

假设mem的地址是0,如果是,

a的地址是0,如果是

b的地址是0+8*4 //0+sizeof(A)*sizeof(B)

如果这是正确的我如何将"指向结构体A的指针"转换为"指向结构体B的指针",然后向地址添加一个数字。(在代码中注释)

谢谢。

您是正确的,如果pT*类型,那么地址p+n是地址p加上n*sizeof(T)

如果paA*类型,将其转换为B*类型,只需编写B * pb = (B*)pa;

如果你想让它前进一个给定的字节数n,你可以先转换为char*,前进(从sizeof(char)=1开始),然后转换为B*。即B* pb = (B*)( ((char*)pa) +n);

然而,除了非常特殊的情况,你不应该真的需要这样做,因为它很容易得到垃圾的结果。

无论你想做什么,都有更好更少出错的方法

最新更新