gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:24:16 24 4
gpt4 key购买 nike

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),然后将 of 转换为 B*。即,B* pb = (B*)( ((char*)pa) +n);

但是,除非非常特殊的情况,否则你真的不需要这样做,因为这样很容易产生垃圾。

无论您实际尝试做什么,都可能有更好且不易出错的方法。

关于c - 在转换不同大小的结构指针时理解内存结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31552256/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com