2 - 2
равно 0
.:)
Фактически эти два выражения
str++;
str++;
могут быть переписаны как
str = str + 1;
str = str + 1;
эквивалентны одному выражению
str = str + 2;
Тогда в выражении с printf
printf(str-2, 300);
вы используете выражение str-2
, которое указывает на первый символ строкового литерала "%d\n"
Или значение выражения str-2
равно исходному значению str
.
(Вы помните, что 2 - 2 == 0
?)
Таким образом, приведенное выше утверждение эквивалентно
printf(str, 300);
, когда str
был изначально инициализирован строковым литералом "%d\n"