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个字节).