c - C中循环缓冲区中的反向遍历

标签 c linux

我有以下数组,我打算将其用作循环缓冲区。

int array1[20]; 

数组由一个线程写入,由另一个线程读取。在阅读时,我需要阅读写入该数组的最后 3 个值。

写作很好。我用

writeIndex = (writeIndex + 1) %20;

写。这很好地翻转了数组索引 0 到 19。

为了阅读我正在使用

readIndex = (readIndex -1)%20;

但是当我尝试从索引 0 转到 19 时它不起作用。

最佳答案

你的代码

readIndex = (readIndex - 1) % 20;

不起作用,因为当 readIndex 以 0 开头时,(readIndex - 1) % 20 将评估为 -1,然后您的数组访问将越界。

在这种情况下,您不想处理负数。为避免这种情况发生,您只需将值加 20 即可:

readIndex = (readIndex - 1 + 20) % 20;

或者只是

readIndex = (readIndex + 19) % 20;

因此,当 readIndex 以 0 开头时,您可以回绕到 19。

关于c - C中循环缓冲区中的反向遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19144276/

相关文章:

使用 C99 编译问题是否在每个 if 周围都有一个范围?

c - pthread_create 可以创建的最大线程数是多少?

linux - 为什么哈希值被打印两次

php - 将文件上传到Linux服务器根文件夹以外的文件夹?

python - 如何在 supervisor - linux 中为受监督的进程添加延迟

c - 选择小于架构大小的变量是一个有效的选择吗?

c - 在 C 中分割从文件读取的字符串很困难

c# - 将字符串从 C++ 编码到 C# 时出现异常

c - scanf "%c"不读取 C 中的空格

linux - cmake 编译但不链接库中的新源文件 (libonion)