【发布时间】:2020-02-04 03:07:14
【问题描述】:
在 C 中使用 void 指针是通用数据类型的一种可移植方法(假设我不想使用预处理器宏或联合类型)?出现这个问题的原因是因为假设我想将 uint64_t 数据存储在 32 位 Linux 发行版中的 void 指针中(=> sizeof(void *) = 4 bytes),将 uint64_t 类型转换为 (void *) 是否安全用于传递给函数,然后将其类型转换回 uint64_t 以检索数据?
【问题讨论】:
-
不,这不安全。您将只有原始数字的 64 位中的 32 位。重新考虑你想要做什么。
-
如果
sizeof(void*)是 4 个字节,也就是 32 位,它不能存储 64 位的信息。 -
@InnocentBystander 完全不相关,但很酷的注释:Bjarne Stroustrup 是我父亲在大学的第一批教授之一。
-
您可能会将指向数据的指针与存储数据的指针混淆。
void指针可以指向任何类型和大小的数据,这就是它被称为通用指针的原因。但它只能存储尽可能多的位。