【发布时间】:2013-07-17 21:43:14
【问题描述】:
我已经使用 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 只是指向当前分配的内存块中某个位置的 void 指针。如果我将元素推入队列,我会将结束指针增加varsize。如果我 pop(),我只需将结束指针也减少varsize。
我不认为我应该在这里发布函数代码,它超过 100 行。
问题:这被认为是好的还是坏的做法?为什么(不)?
注意:我知道 C 中的队列还有很多其他选项。我只是询问这个队列的质量。
编辑:实现可在此处获得: http://89.70.149.19 /stuff/queue.txt(去掉空格)
【问题讨论】:
-
使用 size_t 作为内存大小
-
我认为使用
void*编写通用代码很好 -
@RanEldan 谢谢,我会的。在这里更正了。
-
void*肯定没问题。不过union会更理想。 -
经过下面的讨论后想到,您的意思是堆栈数据结构,而不是队列,不是吗?