В чем разница в константном указателе и целочисленном константном указателе? - PullRequest
0 голосов
/ 21 ноября 2011

Читая руководства по указателям, я столкнулся с кодом, подобным этому

const int *p;

и

int const *p;

и

int *const p;

В чем их основное отличие??

В то время как я назначил адрес любого целочисленного значения, например

int b=100;
b=&p;

, я получаю ошибки.Какой смысл в этом?Кто-нибудь может объяснить это на примере?

1 Ответ

3 голосов
/ 21 ноября 2011

Чаще всего просто читайте его справа налево.

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.Это незаконное обращение.Вы могли бы вызвать это с помощью броска, но я не думаю, что это то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...