Каждое выражение, если оно не является недействительным, имеет значение.
Значение приращения постфикса - это значение его операнда до увеличения.
Из стандарта C (6.5.2.4 Постфиксные операторы увеличения и уменьшения)
2 Результатом постфиксного оператора ++ является значение операнда . В качестве побочного эффекта значение объекта операнда увеличивается (то есть к нему добавляется значение 1 соответствующего типа)
То есть это выражение
*ptr++
оценивается как
*( ptr++ )
, а значение выражения в круглых скобках - это значение указателя (операнда постфиксного приращения) до увеличения самого операнда, которое оценивается как побочный эффект.
Это разница между приращением постфикса и приращением префикса, для которого (6.5.3.1 Операторы увеличения и уменьшения префикса)
2 Значение операнда префикса ++ оператор увеличивается. Результат - новое значение операнда после приращения .
Полезно знать, что оператор постфиксного приращения может использоваться для формирования выражения подстрочного индекса, в то время как оператор приращения префикса может и не быть.
Вот демонстрационная программа.
#include <stdio.h>
int main(void)
{
int a[] = { 1, 2 };
int *p = &a[0];
printf( "a[0] = %d, a[1] = %d\n", a[0], a[1] );
p++[0] = 3;
*p = 4;
printf( "a[0] = %d, a[1] = %d\n", a[0], a[1] );
return 0;
}
Результат программы:
a[0] = 1, a[1] = 2
a[0] = 3, a[1] = 4