我想创建一个简单的结构,其中包含 int
类型的标识符和任何类型的值。我应该使用
struct {
int key;
void *value;
}
或
struct {
int key;
void **value;
}
还是别的?
最佳答案
我会使用第一个,因为 void*
可以指向任何东西。在您的情况下似乎不需要双重间接寻址。
您还应该记住,还有另一种方法,涉及在结构中使用可变大小的有效负载而不是固定的 void*
。它在结构本身被分配(例如在链表中)的情况下很有用,因此您可以通过调整 malloc
的参数来使它们的大小可变。
在那种情况下,您可以完全避免结构中的指针。参见 this answer更多细节。我并不是说对于这种特殊情况有必要(甚至是一个好主意),只是将其作为另一种可能性提供。我怀疑您的选项 1 已经足够了,或者如果您不希望其中有任何指针,则在结构内提供 union 。
关于c - 在结构中使用什么级别的间接寻址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5369344/