怎么计算环形缓冲区长度

定义了一个数组Buff[200],想把它设计成环形缓冲区,写指针:Ptr_W读指针:Ptr_R问:这个读写之间的缓冲区的长度是怎么计算的呢,谢谢!用的c语言... 定义了一个数组 Buff[200],想把它设计成环形缓冲区,
写指针:Ptr_ W
读指针:Ptr_R
问:这个读写之间的缓冲区的长度是怎么计算的呢,谢谢!
用的c语言
展开
 我来答
xoaxa
推荐于2016-12-01 · TA获得超过8611个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3496万
展开全部
两个函数未经调试

#define MAXLEN 200
int Buff[MAXLEN];
int *Ptr_W = Buff; // 写指针初始化为Buff[0]
int *Ptr_R = NULL; // 读指针初始化为NULL

// 读数据。成功读出时,返回1,x存放读出的结果。不成功返回0,x的内容不可用
int ReadData(int Buff[],int *x) {
    if(Ptr_R == NULL || Ptr_R >= Ptr_W) return 0;
    *x = *Ptr_R;
    Ptr_R += Buff + (Ptr_R - Buff + 1) % MAXLEN;
    return 1;
}

// 写数据。成功写入时,返回。不成功返回0
int WriteData(int Buff[],int x) {
    if(Ptr_R == NULL) { // 初次写入
        Ptr_R = Buff;  // 初次写入时,附带完善读指针的初始化操作
        *Ptr_W++ = x;
        return 1;
    }
    if(Ptr_W == Ptr_R) return 0; // 缓冲区满
    *Ptr_W = x;
    Ptr_W += Buff + (Ptr_W - Buff + 1) % MAXLEN;
    return 1;
}
百度网友d580670
2014-02-19 · TA获得超过1983个赞
知道大有可为答主
回答量:2054
采纳率:82%
帮助的人:708万
展开全部
如果是线性的不是环形的话写指针一定需要在读指针后面这样
分两种情况
1: buffer未满的时候 size = ptr_w - ptr_r
2: buffer满的时候
ptr_w > ptr_r --> ptr_w - ptr_r
ptr_w < ptr_r --> 200 - ptr_r + ptr_w
归纳。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式