C语言使用指针实现一个环形缓冲区结构体内包含数组,能够进行空、满检测
时间: 2023-07-16 15:15:16 浏览: 163
C语言环形缓冲区
3星 · 编辑精心推荐
可以定义一个环形缓冲区结构体,包含一个指向数组的指针,以及缓冲区的大小和当前的读写位置等信息。具体实现代码如下所示:
```c
#define BUFFER_SIZE 10
typedef struct {
int* buffer; // 指向数组的指针
int size; // 缓冲区大小
int read_pos; // 当前读取位置
int write_pos; // 当前写入位置
} circular_buffer;
// 初始化环形缓冲区
void init_buffer(circular_buffer* buf) {
buf->buffer = (int*)malloc(BUFFER_SIZE * sizeof(int)); // 分配数组内存
buf->size = BUFFER_SIZE;
buf->read_pos = 0;
buf->write_pos = 0;
}
// 向环形缓冲区写入数据
void write_buffer(circular_buffer* buf, int data) {
buf->buffer[buf->write_pos] = data; // 写入数据
buf->write_pos = (buf->write_pos + 1) % buf->size; // 更新写入位置
if (buf->write_pos == buf->read_pos) {
printf("Buffer is full!\n"); // 缓冲区已满
}
}
// 从环形缓冲区读取数据
int read_buffer(circular_buffer* buf) {
int data = buf->buffer[buf->read_pos]; // 读取数据
buf->read_pos = (buf->read_pos + 1) % buf->size; // 更新读取位置
if (buf->read_pos == buf->write_pos) {
printf("Buffer is empty!\n"); // 缓冲区已空
}
return data;
}
```
在上述代码中,通过使用取模操作来实现环形缓冲区的读写。当写入位置与读取位置相同时,说明缓冲区已满,此时写入操作会提示“Buffer is full!”;当读取位置与写入位置相同时,说明缓冲区已空,此时读取操作会提示“Buffer is empty!”。
阅读全文