加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:38:41 所属栏目:百科 来源:网络整理
导读:我使用void指针在C中实现了一个基本的队列结构.程序如下: 初始化结构 – 我设置要存储在队列中的变量类型的大小 push – 我将指针传递给要存储的变量,然后队列为自己抓取一个副本 front – 结构将void *返回给前面的元素.我可能只是抓住指针,或memcpy()它有
我使用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(删除空格)

解决方法

如果您不知道要存储在队列中的对象的类型和大小,则可以使用void *(实际上,C标准库遵循相同的方法,请参阅memcpy()和qsort()函数例子).但是,最好使用size_t(如果需要签名数据类型,则使用ssize_t)来指定存储在队列中的元素的大小.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读