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的指针",然后向地址添加一个数字。(在代码中注释)
谢谢。
您是正确的,如果p
是T*
类型,那么地址p+n
是地址p
加上n*sizeof(T)
。
如果pa
是A*
类型,将其转换为B*
类型,只需编写B * pb = (B*)pa;
。
如果你想让它前进一个给定的字节数n
,你可以先转换为char*
,前进(从sizeof(char)=1
开始),然后转换为B*
。即B* pb = (B*)( ((char*)pa) +n);
无论你想做什么,都有更好更少出错的方法