#c #pointers
#c #указатели
Вопрос:
Вопрос
1.) Можно ли объявить переменную указателя для ссылки на адрес памяти константы??Я пробовал это раньше pt = amp;20;
(** pt — переменная указателя), но это не работает, значит ли это, что мы не можем этого сделать??Кстати, если это возможно, как я собираюсь это решить??
Ответ №1:
Нет. Вы должны сделать это:
const int x = 20;
const int* p = amp;x;
Ответ №2:
Да, это так.
void * ptr = 0xdeadcode;
Не делайте этого.
Редактировать: или вы имеете в виду адрес постоянного, а не постоянного адреса? Нравится:
const int n = 123;
const int *ptr = amp;n;
Ответ №3:
Нет, литеральные константы as 20
не являются объектами и поэтому у них нет адресов.
Отличаются от этого const
квалифицированные переменные, как в ответе Алекса. Как все переменные, они ссылаются на объект, и поэтому вы можете взять их адрес. Но имейте в виду, что тогда у вас также должен быть указатель на const
определенный тип.
Комментарии:
1. Тогда где константа 20 сохраняется во время выполнения программы по сравнению с переменной?? Спасибо
2. @caramel, он нигде не хранится в том смысле, в каком есть переменная. В тех местах, где ваша программа использует такую константу, в чем-то вроде
if (x < 20) do_something
, константа обычно напрямую интегрируется в инструкцию ассемблера, которая выполняет сравнение. В некоторых местах компилятор может быть не в состоянии этого сделать и должен где-то его хранить, но это полностью его внутреннее дело, и он вам не скажет.