Цитата(Dubov @ Jun 3 2014, 12:19)

Имеется буфер длины N
имеется подпрограмма, принимающая на вход указатель на блок данных длины N.
Буфер заполняется циклически (по заполнении буфера, новый отсчёт поступает в начало буфера).
с каждым новым вызовом подпрограммы, получаемый указатель увеличивается на единицу.
Как закольцевать адресацию массива?
Может быть Вам стоит поступить немного иначе - организовать 2 функции putArray(data) и getarray()
putArray(data) закидывает данные в буффер, контролируя при этом переход через границу буффера и смещая позицию head (позицию куда необходимо закидывать следующие данные)
Код
void putarray(short data)
{
buff[head] = data;
head++;
if(head >= BUFF_SIZE) head = 0; //переход через границу буффера
}
Функция getArray() возвращает или-1 если нет данных, или данные
Код
signed int getArray(void)
{
signed int res = -1;
if(head == tail) return res; //нет данных - возвращаем -1
res = buff[tail];
tail++;
if(tail >= BUFF_SIZE) tail = 0;
return res; //возвращаем данные
}
Эти 2 процедуры позволяют организовать FIFO данных без проверки переполнения буффера.
Если Вам критично отслеживать переполнение, то всегда можно ввести переменную status, которой можно присваивать статусы empty/not_empty/full
Также довольно легко вместо данных, возвращать указатели на данные.