c - 如果我有一个 void 指针,我如何将一个 int 放入其中?

标签 c pointers void-pointers

我有一个任意值数组,所以我将它定义为一个空指针数组,这样我就可以指向任何类型的信息(如 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/

相关文章:

c - 如何清除循环中的第一个输入以正确计算第二个输入?

c++ - C/C++ 行的人类可读优化版本

c++ - 关于指针取消引用的 C/C++ 问题

c++ - 避免空指针

c - C优先顺序查询

c - 如何在 C 中舍入 Float 值

C++ - 结构指针数组

c++ - QSharedPointer 不返回 false

c++ - 如何检查指针在 C++ 中是否有效?

c++ - 读取 char * 始终具有相同的地址