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

时间:2011-08-16 16:08:09

标签: c

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

5 个答案:

答案 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;

它可能违反了严格的别名规则。]