![](/img/trans.png)
[英]Casting structure pointers between structs containing pointers to different types?
[英]Understanding memory structure when casting pointers of different sizes of structs
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);
但是,除了非常特殊的情况外,您实际上不需要做这样的事情,因为这样很容易导致垃圾。
无论您实际上要做什么,都可能有更好和更少出错的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.