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