【发布时间】:2020-03-29 15:35:17
【问题描述】:
如果 void* 包含可变数量的信息,那么简单地将其存储在整数中会不会丢失信息?信息不应该存储在几个整数(aka int*)中吗?
例如:
int func(void* info){
int num = (int)info;
return num;
}
如果 info = Absdfsdfskewlrew.... ,难道 num 不能正确保存这些信息吗?
【问题讨论】:
-
是的。您不能在 32 位 int 中存储超过 32 位的信息。但你为什么要问?你为什么要“将
void *转换为int”?您是在尝试转换指针还是它指向的数据? -
您正在将
info中存储的地址类型转换为一个int,而不是该地址中存储的数据。但是,将void *中存储的地址转换为有符号整数类型的正确数据类型是intptr_t。 -
有人告诉你
void *是 C 中的“通用”类型吗?那可以“保存”任何类型的数据吗?这并不完全正确。void *是一个通用的指针类型,可以指向任何类型的数据。
标签: c type-conversion