Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Индекс массива в C/C++ не может быть отрицательным — это следует из определения массива.
То, что подобные операции могут приводить к отрицательным смещениям, ничем не отличается от технической возможности обратиться к элементу с очень большим индексом, чтобы за счет переполнения попасть раньше начала массива. Тут просто нужно различать техническую возможность получить какой-то результат, и смысл применямой операции.
Ядро фильтра с радиусом r вполне естественно записать в форме:
for (int i = r; i < size - r; ++i)
for (int j = -r; j <= r; ++j)
sum += buf[r] * kernel[r];
++buf;