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

pbe*_*ean 12 c pointers void-pointers

我有一个任意值的数组,所以我将它定义为一个void指针数组,所以我可以指向任何类型的信息(如int字符数组等).但是,我如何实际分配int给它?

以这些初始化为例:

void* data[10];
int x = 100;
Run Code Online (Sandbox Code Playgroud)

我的直觉会想到这一点,但这会产生编译错误:

data[0] = malloc(sizeof(int));
*(data[0]) = x;
Run Code Online (Sandbox Code Playgroud)

我也考虑过使用&x,但我会考虑一个局部变量的地址,这个(据我的理解)将在退出程序后被清除.所以,如果我有一个局部变量x,我如何正确地将它变为void指针类型的变量?

Jon*_*ght 27

*((int*)data[0])=x;
Run Code Online (Sandbox Code Playgroud)

会做的.

您可能想考虑使用联合.像这样的东西:

union myvalues
{
    int i;
    double d;
    long l;
};
Run Code Online (Sandbox Code Playgroud)

你可以拥有

union myvalues *foo[10];
foo[0] = malloc(sizeof(union myvalues));
foo[0]->i = x;
Run Code Online (Sandbox Code Playgroud)

你也可以typedef工会. sizeof(union myvalues)将是sizeof会员的最大数量.因此,如果你有int i;char c[40]在联合,sizeof(union myvalues)将是40.写入i将覆盖前4个字符c(假设你的整数是4个字节).


小智 10

*((int *)data[0]) = x;
Run Code Online (Sandbox Code Playgroud)

将制作x的副本,因此它是局部变量的事实并不重要.