ptr[X]
эквивалентно *(ptr + X)
, поэтому мы можем переписать его следующим образом:
for((*(ptr + X))--; *(ptr + X); (*(ptr + X))--, ptr += Y);
Теперь здесь много избыточности, поэтому мы можем упростить это до:
char *ptr_plus_x = ptr + X;
for((*ptr_plus_x)--; *ptr_plus_x; (*ptr_plus_x)--, ptr_plus_x += Y);
Тогда мы можем полностью избавиться от ptr_plus_x
:
ptr += X;
for((*ptr)--; *ptr; (*ptr)--, ptr += Y);
На английском языке мы посещаем места памяти со смещениями X, X + Y, X + 2Y, X + 3Y, ..., уменьшая каждую ячейку памяти, пока не найдем ячейку памяти, равную 0. Но тест 0 всегда происходит после уменьшения, поэтому мы действительно ищем первую ячейку памяти в этой последовательности со значением 1. Как только мы находим это, мы уменьшаем ее до 0 и завершаем работу.
Если Y равен 1, то мы уменьшаем строку последовательных ячеек памяти, идущих вперед, вплоть до первого 1. Если Y равен -1, то же самое происходит, но поиск выполняется со смещения X. Если Y равен 0 возникает бесконечный цикл. Если Y - любое другое значение, шаблон поиска пропускает различные записи.
Это не очень интуитивно понятная функция, поэтому я понимаю, почему вы запутались.