c - 在结构中使用什么级别的间接寻址?

标签 c struct void-pointers

我想创建一个简单的结构,其中包含 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/

相关文章:

c - 如何在 Arduino 代码中使用延迟?

c++ - 如何根据要排序的 vector 中的 vector<string> 对结构 vector 进行排序?

C++将字符串转换为空指针

c - 在 C 中,void 指针如何取消引用回原始结构?

c - ffmpeg.c 什么是 pts 和 dts ?这个代码块在 ffmpeg.c 中做了什么?

c - gets() 在 C 循环中如何工作?

c - 如何使用 C(不是 C++)在结构的所有实例中拥有一个 const 成员?

c - 如何获取内存位置的对象?

ios - Swift如何访问嵌套结构中的信息?

c++ - 递增指针时带或不带星号