0

我想创建一个简单的结构来保存类型标识符int和任何类型的值。我应该使用

struct {
    int key;
    void *value;
}

或者

struct {
    int key;
    void **value;
}

或者是其他东西?

4

2 回答 2

4

我会使用第一个,因为void*可以指向任何东西。在您的情况下,似乎不需要双重间接。

您还应该记住,还有另一种方法,即在结构中包含可变大小的有效负载,而不是固定的void*. 它在结构本身被分配的情况下(例如在链表中)很有用,因此您可以通过将参数调整为malloc.

在这种情况下,您可以完全避免结构中的指针。有关更多详细信息,请参阅此答案。我并不是说对于这种特殊情况有必要(甚至是一个好主意),只是将其作为另一种可能性提供。我怀疑您的选项 1 将绰绰有余,或者如果您不想要任何指针,则在结构中提供一个联合。

于 2011-03-20T15:19:49.783 回答
0

我认为你必须使用联合和结构的组合:

struct my_struct {
        int key;
        union {
                int a_int;
                float a_float;
                char a_char;
                /* Other types You may need */
        } value;
}

指针只指向一个变量,它不保存它的值。您必须将实际变量存储在其他地方。

于 2011-03-20T15:38:35.220 回答