Я бы хотел реорганизовать какой-то старый C-код, и мне было любопытно, могу ли я заменить все ptr++ на ptr += 1, где ptr - некоторый указатель, не изменяя никакого поведения. Вот пример того, что я имею в виду, из K & R Section 5.3:
/* strlen: return length of string s*/
int strlen(char *s)
{
    int n;
    for (n = 0; *s != '\0'; s++)
        n++;
    return n;
}
Когда я заменяю s++ на s += 1, я получаю те же результаты, но мне интересно, будет ли это иметь место для всех типов. Я также сделал тест для int s:
int size = 10;
int *int_array = (int*)calloc(size, sizeof(int));
for (int i = 0; i < size; i++)
    int_array[i] = i;
for (int i = 0; i < size; i++) {
    printf("*int_array = %d\n", i, *int_array);
    int_array++;
}
Если я заменю строку int_array++; на int_array += 1;, я получаю тот же результат.
Подумав об этом еще немного, я понимаю, что может быть проблема, если значение используется в выражении. Было бы безопаснее, я просто переместил приращение на другую строку следующим образом:
int a = 5;
int b = a++;
станет:
int a = 5;
int b = a;
a += 1;
Заключение
То, что я думал, может быть проблемой, увеличивая указатели на разные типы, не является проблемой. См. Ответ @bdonlan по этой причине.
Это не означает, что вы можете заменить все x++ на x += 1 и ожидать такого же поведения. Однако вы можете безопасно заменить ++x на (x += 1), так как они эквивалентны.
