C语言环形buffer

本文介绍了如何在C语言中实现环形数组,即环形缓冲区。作者分享了在编写过程中的难点,如指针操作的复杂性,以及在实现过程中遇到的问题。文章提供了初始化、创建、删除环形存储区以及读写数据等关键函数的实现,并通过主函数进行验证。
摘要由CSDN通过智能技术生成

C语言环形数组

  • 这是一个循环缓冲区,终于写完了,指针指来指取还是很麻烦的,稍微不注意就出错了
    但是思路还是挺简单的,不过对于小白的我还是用了蛮久的时间的,关键是开始没有构思好
    所以出了很多问题,这是最终版本,以后希望对自己有用,今天是2019.7.25 大吉大利的晚上,各位加油

  • 头文件

#include<stdio.h>
#include <string.h>
  • 函数声明和环形存储区的建立,环形结构体指针的声明
  • 在这里我将以数组作为环形存储区的存储区域,在这里也可以用动态申请内存,这里设置的类型也是int 这里可以根据自己需要更改数据类型,或者定义为一个void *类型,函数的功能就更强大了,不够后面要强制转换,我是个小白,所以以比较简单的想法写的,
#define RB_MAX_LEN    10
typedef unsigned int uint_t;
typedef struct
{
	uint_t sizerb;
	int *write;
	int *read;
	int *buffer;
	uint_t rw;//0代表已经读    1代表已经写,
	
}rb_t;
rb_t rb;
static uint_t rbBuf[RB_MAX_LEN];  

void creatrb(rb_t* rb);


  • 初始化一个环形存储区域

void buff_init(void)
{
	rb.sizerb = RB_MAX_LEN;     //定义长度
	rb.buffer = rbBuf;			//将申请的一个空间的首地址给buffer
	creatrb(&rb);				//然后运行创建函数
	
}
  • 创建一个环形存储区
void creatrb(rb_t* rb)
{
	if(NULL == rb)   //判断指针是否为空
	{
		printf("fault\n");
		return;
	}
    rb->write= rb->buffer;			//将读和写都指向首地址,创建完毕
	rb->read = rb->buffer;
	rb->rw   =0;

}
  • 删除环形存储区
static void deleterb(rb_t *rb)
{
	if(NULL == rb)
	{
		printf("error");
	}
	rb->write = NULL;
	rb->read  = NULL;
	rb->buffer= NULL;
	rb->sizerb = 0;
	rb->rw   =0;
	
}
  • 获取存储区域大小
static uint_t getrb_capacity(rb_t *rb)
{
	if(NULL == rb)   //判断指针是否为空
	{
		printf("fault\n");
		return -1;
	}
	return rb->sizer
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值