我有一个任意值数组,所以我将它定义为一个空指针数组,这样我就可以指向任何类型的信息(如 int
、字符数组等)。但是,我实际上如何为它分配 int
?
以这些初始化为例:
void* data[10];
int x = 100;
我的直觉会这么想,但这会导致编译错误:
data[0] = malloc(sizeof(int));
*(data[0]) = x;
我也考虑过使用 &x
,但我会获取局部变量的地址,(据我所知)该变量在退出过程后会被清除。那么,如果我有一个局部变量 x
,我该如何将它正确地放入一个 void 指针类型的变量中呢?
最佳答案
*((int*)data[0])=x;
会做的。
您可能要考虑使用 union 。像这样:
union myvalues
{
int i;
double d;
long l;
};
然后你可以拥有
union myvalues *foo[10];
foo[0] = malloc(sizeof(union myvalues));
foo[0]->i = x;
您还可以typedef
union 。 sizeof(union myvalues)
将是 sizeof
成员中的最大值。因此,如果 union 中有 int i;
和 char c[40]
,则 sizeof(union myvalues)
将为 40。写入 i
然后将覆盖 c
中的前 4 个字符(假设您的整数是 4 个字节)。
关于c - 如果我有一个 void 指针,我如何将一个 int 放入其中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1327579/