precedencia de ++ (post, prefijo) nd dereference operador

¿No debería ser f la salida del siguiente código?

Obtengo una salida e

 #include void main(){ char arr[]="Geeks"; char *ptr = arr; ++*ptr++; printf("%c\n",*ptr); } 

No, no debería. Su código incrementa el primer carácter y luego mueve el puntero hacia adelante. El puntero apuntará a la primera e , y según la configuración de la configuración regional / carácter, la primera letra probablemente sea H La expresión se analiza de acuerdo con las reglas de precedencia y asociatividad como:

 ++(*(p++)) 

La expresión Sí se analiza como ++ * ((ptr ++)), la primera ptr ++ se calcula, pero debido a que es un incremento postfix, el nuevo valor calculado no actualiza el valor antiguo de ptr hasta que la instrucción termina (;). Next ++ ** (ptr ++) se calcula sobre el valor antiguo de ptr que da como resultado, G cambia a H. Ahora se realiza todo el trabajo, la statement finaliza y se actualiza el valor de ptr, que apunta al siguiente elemento que es e.