Указание указателя на другой указатель - что происходит? - PullRequest
1 голос
/ 21 октября 2010

Интересно, кто-нибудь может прояснить для меня следующее.Что произойдет, если я укажу указатель на другой указатель?Например,

Pointer 1 = Object
Pointer 2 = Pointer 1

Что если я затем изменю указатель 1:

Pointer 1 = Object 2

Куда указывает указатель 2?

Спасибо,

Мартин

Ответы [ 2 ]

1 голос
/ 21 октября 2010
Pointer 1 = Object

Указатель 1 содержит адрес объекта.

Pointer 2 = Pointer 1

Вы назначаете значение Указателя 1 для Указателя 2. Значение Указателя 1 является адресом Объекта. Таким образом, указатель 2 также содержит адрес объекта.

Pointer 1 = Object 2

Указатель 1 изменяется, но значение Указателя 2 не изменяется. Таким образом, указатель 2 по-прежнему содержит адрес объекта.

Объект указатель содержит адрес, то есть значение переменной указателя является адресом памяти. Если вы назначаете это другому указателю, то этот адрес назначается так же, как обычное целое число. Однако указание на указатель (то есть указатель на указатель или **) отличается от назначения указателя другому.

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

0 голосов
/ 21 октября 2010

По сути, скажите вслух, что делает ваш код. Указатель 1 указывает на адрес объекта 1. Указатель 2 указывает на адрес указателя 1. Изменение значения указателя 1 не приводит к изменению адреса указателя 1. Даже когда вы освобождаете содержимое указателя 1.
Это может помочь, если вы думаете об объектах как о закрытых ячейках, а указатели - как о корзинах. Вы кладете коробку в корзину 1, а затем кладете корзину 1 в корзину 2. Если вы, таким образом, достаете коробку из корзины 1 и заменяете ее другой коробкой, вдруг в корзине 2 есть что-то еще?

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