繁体   English   中英

我可以将 size_t 视为空指针吗?

[英]Can I treat size_t as a void pointer?

我正在使用一个将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*的函数吗?

通常,当通用库提供诸如队列管理、排序、生成线程等算法时, void *参数本质上意味着“我会处理你想要的任何东西。 把它放在内存中并给我一个指向它的指针。 你需要的时候,我会把指针还给你。”

这通常与结构一起使用。 需要管理传递给线程的作业信息,例如开始和结束索引、配置参数等? 定义一个结构体类型,为其分配内存,为库的void *参数传递内存地址。 但它也可以与标量项目一起使用。

要传递size_t ,请使用mallocsize_t分配空间,将值放入分配的空间中,并将地址传递给queue_insert

当你弹出一个元素时,使用size_t *s = queue_pop(queue); . 那么*s是您存储的size_t 当您使用它时,请使用free(s)释放内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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