【发布时间】:2013-02-05 15:49:36
【问题描述】:
我正在尝试创建一个可以保存通用值的结构。下面的代码有效,但我收到关于从指针转换为整数的编译器警告。这是在 64 位系统上。
struct node
{
void *key;
void *value;
};
void insert(struct node *ht, void *key, void *value)
{
ht->key = key;
ht->value = value;
return;
}
int main()
{
struct node *t = (struct node *)malloc(sizeof(struct node));
insert(t, (void *)3, (void *)5);
printf("[%d]->[%d]\n", (int)t->key,(int)t->value);
free(t);
return 0;
}
我什至不确定这是否是正确的方法。我有点破解它。请让我知道是否有适当的方法来做到这一点。
【问题讨论】:
-
您是否有理由不只是使用
ints 开始? -
在C语言中,请不要cast the return value of
malloc()。 -
如果您要使用 void 指针,请使用它们来存储指针,而不是整数。 (并且有支持和反对从
malloc()转换返回值的论据;你没有有 来避免它,但你应该知道为什么 你这样做或不这样做铸件。) -
您可能有 64 位指针,但您可能仍在使用 32 位整数。 (或者不太可能,反之亦然!)
-
为什么使用指针来存储 int 数据?