use*_*520 6 c queue pointers void
我使用void指针在C中实现了一个基本的队列结构.程序如下:
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
};
Run Code Online (Sandbox Code Playgroud)
start和end只是指向当前分配的内存块中某个位置的void指针.如果我在队列上推送元素,我将结束指针递增varsize.如果我pop(),我只是递减结束指针varsize.
我不认为我应该在这里发布功能代码,它超过100行.
问题:这被认为是好的还是坏的做法?为什么不)?
注意:我知道C中的队列还有很多其他选项.我只是询问这个的质量.
编辑:可以在这里获得实现:http:// 89.70.149.19 /stuff/queue.txt(删除空格)
小智 8
这是确定的使用void *,如果您不知道对象的类型和大小存储在队列中(事实上,C标准库遵循同样的方法,请参阅memcpy()和qsort()功能的一些例子).但是,最好使用size_t(或者ssize_t如果需要签名数据类型)来指定存储在队列中的元素的大小.