конст и указатели в C

Использование const с указателем может сделать pointee неизменяемым, разыменовав его с помощью указанного указателя. Но почему ни я не могу изменить то, на что прямо указывает указатель?

Например:

int a = 3;
const int* ptr = &a;
*ptr = 5;

не будет компилироваться. Но почему

*(ptr + 2) = 5;

тоже не компилируется? Я не меняю то, на что указывает указатель.
Итак, нужно ли говорить, что использование const с указателем таким образом не только не изменяет то, на что указывает указатель (путем разыменования указателя), но и все остальное, на что адрес, который мы получаем с помощью указателя?

Я знаю, что в примере я пытаюсь получить доступ к нераспределенной памяти, но это только для обсуждения.

Ответы на вопрос(5)

Ваш ответ на вопрос