Вопрос

Я знаю, что указатели хранят адрес значения, на которое они указывают, но если вывести значение указателя прямо на экран, то получится шестнадцатеричное число.Если число соответствует именно тому, что хранит указатель, то при произнесении

pA = pB; //both are pointers

вы копируете адрес.Тогда не будет ли использование указателей при работе с очень маленькими объектами, такими как intпесок boolс?

Это было полезно?

Решение

Указатель — это, по сути, просто число.Он сохраняет адрес в оперативной памяти, где находятся данные.Сам указатель довольно мал (вероятно, того же размера, что и int на 32-битных архитектурах, long на 64 битной версии).

Вы правы, хотя это int * не будет экономить место при работе с intс.Но дело не в этом (без каламбура).Указатели существуют, поэтому вы можете иметь Рекомендации к вещам, а не просто использовать вещи сами себя.

Другие советы

Адреса памяти.

Это места в памяти, где другие вещи является.

Указатели обычно имеют размер слова процессора, поэтому их обычно можно перемещать за один командный цикл.Короче говоря, они быстрые.

Как говорили другие, указатель хранит адрес памяти, который является «просто числом», но это абстракция.В зависимости от архитектуры процессора это может быть более одного числа, например, база и смещение, которые необходимо добавить для разыменования указателя.В этом случае накладные расходы немного выше, чем если бы адрес представлял собой одно число.

Да, есть накладные расходы при доступе к int или bool через указатель, а не к.напрямую, где процессор может поместить переменную в регистр.Указатели обычно используются там, где значение косвенности перевешивает любые накладные расходы, т.е.обход массива.

Я имел в виду временные затраты.Не уверен, что ОП больше беспокоился о пространстве или времени.

Число относится к его адресу в памяти.Размер указателя обычно соответствует размеру архитектуры компьютера, поэтому дополнительные накладные расходы по сравнению с любым другим типом примитивов отсутствуют.

В некоторых архитектурах существуют дополнительные накладные расходы на указатели на символы, поскольку архитектура поддерживает только слова адресации (32- или 64-битные значения).Таким образом, указатель на символ сохраняется как адрес слова и смещение символа внутри этого слова.Разыменование указателя включает выборку слова, а затем сдвиг и маскирование его значения для извлечения символа.

Адрес в памяти.Указывает куда-то!:-)

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

Переменные По сути, это ячейки памяти (обычно содержащие некоторые значения), и мы используем некоторый идентификатор (например, имена переменных) для ссылки на эту область памяти и используем значение, присутствующее в этом месте.

Для лучшего понимания предположим, что мы хотим, чтобы информация из ячеек памяти присутствовала в каком-то месте относительно текущей переменной.Можем ли мы использовать идентификатор для извлечения информации из соседних ячеек?Нет.Потому что идентификатор (имя переменной) будет давать только значение, содержащееся в этой конкретной ячейке.

Но если каким-то образом мы сможем получить адрес памяти, по которому присутствует эта переменная, мы сможем легко перейти к близлежащим местам и также использовать их информацию (во время выполнения).

Здесь в игру вступают указатели.Они используются для хранения местоположения этой переменной, чтобы мы могли использовать дополнительную информацию об адресе, когда это необходимо.

Синтаксис: Чтобы сохранить адрес переменной, мы можем просто использовать Оператор & (адрес).

foo = &bar 

Здесь foo хранит адрес переменной bar.

А что, если мы хотим узнать значение, присутствующее по этому адресу?

Для этого мы можем просто использовать * (разыменование) оператор.

value = *foo

Теперь, когда нам нужно сохранить адрес переменной, нам понадобится память так же, как и в случае с переменной.Это означает, что указатели хранятся в памяти так же, как и другие переменные, поэтому, как и в случае с переменными, мы также можем сохранить адрес указателя в еще один указатель.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top