[英]Is it possible to have the same array of pointers to struct point to different types of struct?
我正在使用指向结构的指针,并进行了以下设置,该设置一直在工作。
/* Initialized. */
struct base { ... };
struct base **db;
db = malloc( base_max * sizeof *db );
/* When a new struct base is required. */
db[ i ] = malloc( sizeof( struct base ) );
现在,如果可能的话,虽然不是很重要,但我只想db[0]
指向一个不同的结构, struct mem {... }
。 这是可能的吗?这样做的正确方法是什么?
我想我可以设置db[0] = malloc( sizeof( struct mem ) )
; 但是db
已经被声明为指向一个指向struct base
的指针; db
的 memory 分配也是基于此。
我很困惑,因为我读到的指针必须有类型,否则指针算术将无法正常工作; 但我也读到你不必从malloc
指针,即使它返回 void 指针。
关于重复的问题,虽然它讨论了 void 类型,但它并没有回答我关于如何完成这个或它的风险的问题。 @4386427 的评论似乎指向要考虑的真正问题,该问题未在其他问题或对此问题的一个答案中解决。 谢谢你。
在大多数架构中,指针(指向任何类型)的大小是恒定的,并且任何指针类型通常会占用相同数量的 memory。
除非您在一些非常不常见的硬件/平台上,否则您可以使用malloc()
返回的任何指针分配db[0]
,并使用完全用于大小计算的不同结构类型。
db[0] = malloc( sizeof( struct mem ));
应该做得很好,您只需要担心 memory 泄漏,因为您将覆盖malloc()
返回的先前 memory 位置。
但是,由于您要存储指向不同类型的 memory 的指针,因此在使用db[0]
时,即取消引用它,您需要将其转换为正确的指针类型(即struct mem*
),然后才能使用基于struct mem
类型访问 /operate 的指针。
也就是说,
我很困惑,因为我读到的指针必须有类型,否则指针算术将无法正常工作;
确实如此
但我也读到你不必从 malloc 转换指针,即使它返回 void 指针。
同样正确的是,当您将指针分配给某种类型的变量(除了void
)时,转换是隐式的。 您可以使用该变量来执行指针运算。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.