简体   繁体   English

C-将真正的int值分配给void指针,而不是地址/指针值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM