【发布时间】:2021-09-25 16:59:30
【问题描述】:
我正在使用将void* 存储在队列中的外部库。例如,
void queue_insert(Queue* queue, void* data);
但是,我想将 size_t 数据存储在队列中。我无法传递size_t 数据的地址(因为它是本地范围的)。不过,我再也不需要访问数据了。
换句话说,我将调用这些函数
queue_insert(queue, 5);
bool exists = queue_contains(queue, 5);
但我永远不会做以下事情(因为这没有意义)
void* p = queue_pop(queue);
size_t s = *p;
话虽如此,我可以将size_t 变量传递给采用void* 的函数吗?
【问题讨论】:
-
"我可以将 size_t 变量传递给一个接受 void* 的函数吗" --> 从一个到另一个的转换可能会丢失信息。 sdasdadas,您的应用程序可以吗?代码的可移植性如何?
-
没有完全的可移植性,你不能,但在许多实现中,它可能会被记录或接受实践。
-
sdasdadas,
size_t-->void *-->size_t未在 C 中指定以返回原始size_t。它可能适用于某些值,可能不会。 -
uintptr_t在这里帮不了你;保证您可以将指针存储在uintptr_t中并将其取回,但反之则不行。 AFAIK 获得完全可移植性的唯一方法是为您的size_t提供malloc空间,存储指针,稍后释放它。 -
@NateEldredge
void *-->uintptr_t-->void *被指定为产生一个 equivalent 指针,但不一定是相同的位模式。您的malloc()想法不错。
标签: c pointers void-pointers