[英]C - assigning a true int value to void pointer instead of address/pointer value?
I'm having to deal with a generalised linked list so I cannot just turn the data format from a void *
to an int
. 我必须处理一个广义的链表,所以我不能仅仅将数据格式从
void *
转换为int
。
Miniscule version: 迷你版:
int main(int argc, char **argv) {
void *data;
int i = 100;
*((int*)data) = i;
printf("%d", (int)data);
return 0;
}
Keeps printing an address. 继续打印地址。 Likewise,
data = &i
also returns an address. 同样,
data = &i
也返回一个地址。 data = i
just results in an error. data = i
只是导致错误。 I've tried all that I can and just cannot insert the value i
into data
. 我已经尽力并且不能将值
i
插入data
。
You need to make data
point to a valid memory address first: 您需要首先将
data
指向有效的内存地址:
int main(int argc, char **argv) {
void *data = malloc(sizeof (int));
int i = 100;
*((int*)data) = i;
printf("%d", *((int*)data));
return 0;
}
Without that malloc()
, double undefined behaviour(accessing an uninitialised object && writing data to a random address) will be invoked. 如果没有该
malloc()
,则将调用双重未定义行为(访问未初始化的对象,并将数据写入随机地址)。
Also, change (int)data
to *((int*)data)
in your printf()
statement. 另外,在
printf()
语句中将(int)data
更改为*((int*)data)
。 If sizeof (int) > sizeof (void *)
, data
will be truncated when being cast. 如果
sizeof (int) > sizeof (void *)
,则data
在转换时将被截断。
If you need to use a void *
as a generalised container. 如果需要将
void *
用作通用容器。
Got two options for integer or other data types 对于整数或其他数据类型有两个选项
void * data = malloc(sizeof(DATATYPE)); // Datatype can be int in this case
Then 然后
*((int *)data) = SOME VALUE;
Then free it at some point 然后在某个时候释放它
Otherwise one can usually assume an internet "fits" into a void *. 否则,通常可以假定互联网“适合”了一个空白*。
I would not go down this avenue. 我不会走这条路。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.