我有以下数组,我打算将其用作循环缓冲区。
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/