繁体   English   中英

投射不同大小的结构的指针时了解内存结构

[英]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 ,如果是

的地址a0 ,如果是这样

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

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

谢谢。

您是正确的,如果pT*类型,则地址p+n是地址pn*sizeof(T)

如果paA*类型,将其转换为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM