繁体   English   中英

是否可以将相同的指向 struct 的指针数组指向不同类型的 struct?

[英]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.

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