将值分配给解除引用的void指针

我正在用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的内存块中。 可以帮我吗?

你可能想做:

 void* a; int x; a = malloc(sizeof(int)); x = 120; *(int*)a = x; printf("%d", * (int*)a); free(a); 

你太复杂了。 只需将a转换为int * ,或者更好地声明a as 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 ++中有类似的东西有更简单的方法,但你似乎主要是在指针语法中。

你需要强制转换为*(int*)(a) = x;

首先,必须将a转换为适当的指针类型, 然后取消引用它。 其次,使用模板 – 这就是他们的目的。 第三,malloc和free是baaaad,好吗? 别。 如果你认为这是一个很好的代码,你需要认真的补救C ++。 第四,这已经完成了 – boost::any就是为了这个目的。

还有其他优雅的方法来分配不同类型的变量。 对于您当前的问题,您可以按照标准方式,

 int* const a = new int; //... *a = 120; //... delete a; 

或者只是针对这个问题,

 int a = 120; // simple 

[注意:如果你当前的解决方案,

 *((int*)(a)) = x; 

它可能会破坏严格的别名规则。]