如何解决我可以将 size_t 视为空指针吗?
我正在使用一个将 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
,使用malloc
为size_t
分配空间,将值放入分配的空间,并将地址传递给queue_insert
。>
当你弹出一个元素时,使用 size_t *s = queue_pop(queue);
。那么 *s
是您存储的 size_t
。当你使用它时,用 free(s)
释放内存。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。