Создать указатель на постоянный адрес ячейки памяти??(Программирование на C)

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