微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决我可以将 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,使用mallocsize_t分配空间,将值放入分配的空间,并将地址传递给queue_insert。>

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。