C - 为void指针而不是地址/指针值分配一个真正的int值?

时间:2016-04-02 00:23:26

标签: c

我不得不处理广义链表,因此我不能将数据格式从void *转换为int

微不足道的版本:

int main(int argc, char **argv) {
    void *data;
    int i = 100;
    *((int*)data) = i;
    printf("%d", (int)data);
    return 0;
}

继续打印地址。同样,data = &i也会返回一个地址。 data = i只会导致错误。我尽我所能,只是无法将值i插入data

2 个答案:

答案 0 :(得分:1)

您需要先data指向有效的内存地址:

int main(int argc, char **argv) {
    void *data = malloc(sizeof (int));
    int i = 100;
    *((int*)data) = i;
    printf("%d", *((int*)data));
    return 0;
}

如果没有malloc(),将调用双重未定义的行为(访问未初始化的对象以及将数据写入随机地址)。

另外,在(int)data语句中将*((int*)data)更改为printf()。如果sizeof (int) > sizeof (void *)data在投放时会被截断。

答案 1 :(得分:0)

如果您需要使用void *作为通用容器。

为整数或其他数据类型提供了两个选项

 void * data = malloc(sizeof(DATATYPE)); // Datatype can be int in this case

然后

 *((int *)data) = SOME VALUE;

然后在某个时候释放它

否则,通常可以假设互联网“适合”为空*。

我不会走这条大道。