Чаще всего просто читайте его справа налево.
int const *p;
"p
- указатель на const
int
".
int *const p;
"p
- это const
указатель на int
".
Исключением является случай, когда const
является ключевым словом по крайней мере:
const int *p;
Тогда оно совпадает с:
int const *p;
Если указатель равен const
, вы не можете изменить его адрес, но вы можете изменить значение, указанное им.Если указанное значение равно const
(int
в вашем случае), то вы не можете изменить то, на что указывает указатель (но вы можете сделать так, чтобы оно указывало на что-то другое).
Какэто не скомпилировано:
int b=100;
b=&p;
Поскольку вы присваиваете адрес указателя с возможностью проверки (a int **
) на b
.Это незаконное обращение.Вы могли бы вызвать это с помощью броска, но я не думаю, что это то, что вы хотите.