我不得不处理广义链表,因此我不能将数据格式从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
。
答案 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;
然后在某个时候释放它
否则,通常可以假设互联网“适合”为空*。
我不会走这条大道。