Expressões de ponteiro: * ptr ++, * ++ ptr e ++ * ptr

Recentemente me deparei com este problema que não consigo entender sozinho.

O que essas três expressõesREALMENTE significar?

*ptr++
*++ptr
++*ptr

Eu tentei o Ritchie. Mas, infelizmente, foi incapaz de seguir o que ele disse sobre essas 3 operações.

Eu sei que eles são todos executados para incrementar o ponteiro / o valor apontado. Eu também posso adivinhar que pode haver muitas coisas sobre precedência e ordem de avaliação. Como um primeiro incrementa o ponteiro, em seguida, busca o conteúdo desse ponteiro, um simplesmente busca o conteúdo e, em seguida, incrementa o ponteiro etc. etc. Como você pode ver, eu não tenho uma compreensão clara sobre o seureal operações, o que eu gostaria de esclarecer o quanto antes. Mas estou realmente perdido quando tenho a chance de aplicá-los em programas. Por exemplo:

int main()
{
    const char *p = "Hello";
    while(*p++)
         printf("%c",*p);
    return 0;
}

me dá esta saída:

ello

Mas minha expectativa era de que imprimiriaHello . Um pedido final - Por favor, dê-me exemplos de como cada expressão funciona em um determinado trecho de código. Como na maior parte do tempo, apenas um mero parágrafo da teoria sobrevoa a minha cabeça.

questionAnswers(10)

yourAnswerToTheQuestion