我想创建一个简单的结构来保存类型标识符int
和任何类型的值。我应该使用
struct {
int key;
void *value;
}
或者
struct {
int key;
void **value;
}
或者是其他东西?
我想创建一个简单的结构来保存类型标识符int
和任何类型的值。我应该使用
struct {
int key;
void *value;
}
或者
struct {
int key;
void **value;
}
或者是其他东西?
我会使用第一个,因为void*
可以指向任何东西。在您的情况下,似乎不需要双重间接。
您还应该记住,还有另一种方法,即在结构中包含可变大小的有效负载,而不是固定的void*
. 它在结构本身被分配的情况下(例如在链表中)很有用,因此您可以通过将参数调整为malloc
.
在这种情况下,您可以完全避免结构中的指针。有关更多详细信息,请参阅此答案。我并不是说对于这种特殊情况有必要(甚至是一个好主意),只是将其作为另一种可能性提供。我怀疑您的选项 1 将绰绰有余,或者如果您不想要任何指针,则在结构中提供一个联合。
我认为你必须使用联合和结构的组合:
struct my_struct {
int key;
union {
int a_int;
float a_float;
char a_char;
/* Other types You may need */
} value;
}
指针只指向一个变量,它不保存它的值。您必须将实际变量存储在其他地方。