gpt4 book ai didi

使用 void* 的 C 队列实现 - 好的还是坏的做法?

转载 作者:太空狗 更新时间:2023-10-29 17:19:45 25 4
gpt4 key购买 nike

我已经使用 void 指针在 C 中实现了一个基本的队列结构。流程如下:

  • 初始化结构——我设置要存储在队列中的变量类型的大小
  • push - 我将指针传递给要存储的变量,然后队列为自己获取一个副本
  • front - 该结构将 void* 返回给前面的元素。我可能只是捕获指针,或者 memcpy() 它有一个本地副本。

结构本身看起来像这样:

struct queue
{
void* start; //pointer to the beginning of queue
void* end; //-||- to the end
size_t memsize; //size of allocated memory, in bytes
size_t varsize; //size of a single variable, in bytes
void* initial_pointer; //position of the start pointer before pop() operations
};

start 和 end 只是指向当前分配的内存块中某个位置的空指针。如果我将元素插入队列,我会将结束指针递增 varsize。如果我 pop(),我也只是将结束指针递减 varsize

我认为我不应该在这里发布函数代码,它超过了 100 行。

问题:这是好事还是坏事?为什么(不)?

注意:我知道 C 中的队列还有许多其他选项。我只是问这个的质量。

编辑:实现可在此处获得:http://89.70.149.19/stuff/queue.txt(去掉空格)

最佳答案

如果不知道队列中要存储的对象的类型和大小,可以使用void *(事实上,C标准库遵循相同的方法,参见memcpy()qsort() 函数的一些示例)。但是,最好使用 size_t(如果您需要有符号数据类型,则使用 ssize_t)来指定存储在队列中的元素的大小。

关于使用 void* 的 C 队列实现 - 好的还是坏的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17731958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com