我正在用c ++编写一个类,它支持任何类型的变量来帮助我完成未来的项目。问题是,当我尝试为void*
变量赋值时,我得到错误:void*
不是指针对象类型。这是代码:
int main (void) {
void* a;
int x;
a = malloc(sizeof(int));
x = 120;
((int)(*a)) = x;
printf("%d",((int)*a));
free(a);
system("pause");
return 0;
}
我看到它就像我试图在为a保留的内存块中分配x的值。我希望存储在x中的值存储在a的内存块中。可以帮助我吗?
答案 0 :(得分:5)
您可能想要这样做:
void* a;
int x;
a = malloc(sizeof(int));
x = 120;
*(int*)a = x;
printf("%d", * (int*)a);
free(a);
答案 1 :(得分:3)
首先,您必须将a
转换为适当的指针类型,然后然后取消引用它。其次,使用模板 - 这就是他们的目的。第三,malloc和free是baaaad,好吗?别。如果您认为这是一个很好的代码,那么您需要认真的补救C ++。第四,这已经完成 - boost::any
就是为了这个目的。
答案 2 :(得分:3)
你太复杂了。只需将a
转换为int *
,或者更好地将a
声明为int *以开始。
int x = 120;
int * a ;
// now just cast the result from malloc as int*
if((a = (int *)malloc(sizeof(int))) == NULL){ //ALWAYS check
exit(-1);
}
*a = x;
有很多方法可以在C ++中做类似的事情,但你似乎主要是在指针语法中。
答案 3 :(得分:3)
您需要将演员视为*(int*)(a) = x;
。
答案 4 :(得分:0)
还有其他优雅的方法来分配不同类型的变量。对于您当前的问题,您可以按照标准方式进行操作,
int* const a = new int;
//...
*a = 120;
//...
delete a;
或者只是针对这个问题,
int a = 120; // simple
[注意:如果你当前的解决方案,
*((int*)(a)) = x;
它可能违反了严格的别名规则。]