Qual é a diferença entre essas declarações em C?

Em C e C ++, o que as seguintes declarações fazem?

const int * i;
int * const i;
const volatile int ip;
const int *i;

Alguma das declarações acima está errada?

Se não, qual é o significado e as diferenças entre eles?

Quais são os usos úteis das declarações acima (quero dizer, em que situação devemos usá-las em C / C ++ / C incorporado)?

questionAnswers(2)

yourAnswerToTheQuestion