0 / 0 / 2
Регистрация: 03.01.2013
Сообщений: 113
|
||||||
1 | ||||||
Применение указателей22.04.2013, 02:50. Показов 2693. Ответов 21
Метки нет (Все метки)
Доброй ночи. Встретил вот такое выражение в книге и не могу понять что к чему:
Disntace - класс. Операция new выделяет место равное объекту класса Distance и возвращает указатель на блок памяти, который выделили мы у операционной системы. Не могу понять к чему там ссылка (знак амперсанда ) и к чему там операция разыменования. Каким образом оно работает? Объясните пожалуйста саму схему данного выражения. Обязательно плюсану на спасибо. Благодарю.
0
|
22.04.2013, 02:50 | |
Ответы с готовыми решениями:
21
Применение указателей Применение и удаление указателей Применение указателей, структур и объединений Почему в сортировке указателей на объекты в вызове функции используются адреса объектов, а не указателей? |
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
22.04.2013, 03:02 | 2 |
Обычное разыменовывание указателя, new выделяет память и возвращает указатель, далее он разыменовывается и получается ссылка на объект Distance, а т.к. -> используется заместо (*...). тут он уже не требуется.
2
|
Комп_Оратор)
|
||||||
22.04.2013, 04:07 | 3 | |||||
IvanInanovich, разыменуя указатель можно получить значение на которое можно сослаться. Однако памятуя, что объект создан динамически его нужно будет потом уничтожить. Так например:
1
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
22.04.2013, 09:16 | 4 |
, который сразу же разыменуется и присваивается ссылке. Выстрел в ногу: динамическая память должна принудительно удаляться оператором delete, а к ссылкам он не применим.
2
|
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
|
||||||
22.04.2013, 09:28 | 5 | |||||
IGPIGP, так тоже сработает
1
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
22.04.2013, 10:08 | 6 |
Кудаив, Вы главное не спутайте, что & применяется к dist, а не к delete. Хоть такая запись как у Вас тоже будет синтаксически разобрана корректно.
По теме: приведение указателя к ссылке лишь для того, чтобы вместо -> писать . довольно глупая затея.
1
|
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
|
|
22.04.2013, 10:11 | 7 |
Tulosba, да я не путаю привычка так писать
0
|
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
|
|
22.04.2013, 11:15 | 9 |
Tulosba, о нет - только не побитовое и
0
|
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
|
|
22.04.2013, 11:41 | 11 |
Tulosba, чтоб понять что это контекста маловато))
0
|
Комп_Оратор)
|
|
22.04.2013, 12:51 | 13 |
Конечно. Операция взятия адреса всё равно предполагает создание временной переменной.
Но понятнее всё же через указатель. Дело вкуса. Тут же не только в необходимости разыменования дело. Допустим нужно локально создать ссылку для последующей модификации в функции которая принимает ссылку. Можно конечно в и аргументе написать: &* но это вряд ли хорошо читать. А потом ещё использовать результат... Так что может кому-то понравится и так как предложено. Мне лично это не нравится.
0
|
0 / 0 / 2
Регистрация: 03.01.2013
Сообщений: 113
|
|
22.04.2013, 14:13 [ТС] | 14 |
Благодарю ребят за разъяснения.
Хотелось бы уточнить один момент. Перед инициализации ссылки мы разыминовываем указатель. Для чего это делается? Разыминованый указатель имеет иной адрес? Т.е. есть адрес объекта номер 1, и есть адрес значения объекта номер 1 (и в данной ситуации мы просто присваиваем ссылку на значение объекта номер 1) или как?
0
|
Комп_Оратор)
|
|||||||||||
22.04.2013, 14:19 | 15 | ||||||||||
Ссылка должна инициализироваться значением в момент создания. То есть код:
1
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||
22.04.2013, 14:34 | 16 | |||||
А нафига? Лучше, как здесь уже предлагалось, сделать ссылку на сам указатель:
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
22.04.2013, 15:13 | 18 |
0
|
0 / 0 / 2
Регистрация: 03.01.2013
Сообщений: 113
|
|
22.04.2013, 17:02 [ТС] | 19 |
Дело тут не в принципиальности)).
До этого, в книге встречались только передачи по ссылке аргументов в функции. А тут определение идет и инициализация не в сигнатуре функции. В добавок объясняется как мне показалось не очень понятно. Вот и пытаюсь понять, как оно работает. В книге пишется что на практике такое редко используется. Ребят, еще раз мы создаем ссылку, в которую ложем разыминованый указатель т.е. прямой доступ к значению переменной? Ссылка есть ссылка, указатель есть указатель. Не могу понять каким образом ссылка видит и сохраняет в себе разыминованый указатель. Т.е. если бы указатель сохранял ссылку в себе - понятно. А наоборот в добавок операция розыминования - до меня не доходит. Возможно глупая ситуация, но все же.. И еще раз благодарю что разъясняите.
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
22.04.2013, 17:12 | 20 |
IvanInanovich, ссылка это всего лишь альтернативное имя переменной. Но в данном случае, переменная не имеет имени, т.к. создается динамически и сразу же разыменовывается.
P.S. Что у Вас с русским языком, IvanInanovich ?
0
|
22.04.2013, 17:12 | |
22.04.2013, 17:12 | |
Помогаю со студенческими работами здесь
20
Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей Объяснить различия в работе указателей на целое число и указателей на const char (строки в стиле Си) Создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей Различия указателей char* от указателей других типов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |