Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
IvanInanovich
0 / 0 / 0
Регистрация: 03.01.2013
Сообщений: 113
#1

Применение указателей - C++

22.04.2013, 02:50. Просмотров 1977. Ответов 21
Метки нет (Все метки)

Доброй ночи. Встретил вот такое выражение в книге и не могу понять что к чему:
C++
1
Distance& dist = *(new Distance);
После чего можно обращаться к объекту через операцию точки, а не "->".

Disntace - класс. Операция new выделяет место равное объекту класса Distance и возвращает указатель на блок памяти, который выделили мы у операционной системы.
Не могу понять к чему там ссылка (знак амперсанда ) и к чему там операция разыменования. Каким образом оно работает?

Объясните пожалуйста саму схему данного выражения. Обязательно плюсану на спасибо. Благодарю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2013, 02:50     Применение указателей
Посмотрите здесь:

Применение и удаление указателей - C++
Здравствуйте. Я не могу понять сути,когда нам нужно удалить указатель для освобождения памяти. Есть указатель: int...

применение указателей, структур и объединений - C++
Здравствуйте, люди добрые!! (^_^)/ Очень нуждаюсь в вашей помощи... Помогите разобраться студентке!! (Y_Y)(^o^)/ Задание...

Применение - C++
Возможно вы посчитаете данный вопрос глупым. Но я его задам. Где можно применять C++ и C программисту, при этом не используя GUI? И...

применение c++ - C++
в 1 семестре начали проходить с++ за сем дошли до указателей (во 2 их начнем) прошли: типы, константы, операции, функции (передача по...

Практическое применение c++ - C++
Решил изучить с++, но столкнулся со следующей проблемой: как программы на этом языке применяются на практике? При изучении с# находил...

Применение метапрограммирования - C++
Доброго времени суток форумчане. Собственно говоря, как часто применимо метапрограммирование в современном мире разработок на C++. И имеет...

Применение ООП - C++
добрый день. вот написал небольшой класс по работе с матрицами. он пока делает : присваивание значений матриц, удаление, ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.04.2013, 14:34     Применение указателей #16
Цитата Сообщение от IGPIGP Посмотреть сообщение
Distance *dist_ptr = new Distance;
Distance& distRef = *dist_ptr;//создание ссылки - доп инструкция, но не доп память))
//что-то происходит...
delete *dist_ptr;//но тут красивше и не нужно дополнительной
А нафига? Лучше, как здесь уже предлагалось, сделать ссылку на сам указатель:
C++
1
2
3
4
Distance *dist_ptr = new Distance;
Distance &*distRef = dist_ptr;//создание ссылки - доп инструкция, но не доп память))
//что-то происходит...
delete *dist_ptr;
.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
22.04.2013, 14:37     Применение указателей #17
Цитата Сообщение от taras atavin Посмотреть сообщение
Лучше, как здесь уже предлагалось, сделать ссылку на сам указатель
Цитата Сообщение от taras atavin Посмотреть сообщение
А нафига?
Действительно, нафига?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.04.2013, 15:13     Применение указателей #18
Цитата Сообщение от Tulosba Посмотреть сообщение
Действительно, нафига?
Ну если ему охота иметь ссылку.
IvanInanovich
0 / 0 / 0
Регистрация: 03.01.2013
Сообщений: 113
22.04.2013, 17:02  [ТС]     Применение указателей #19
Дело тут не в принципиальности)).
До этого, в книге встречались только передачи по ссылке аргументов в функции.
А тут определение идет и инициализация не в сигнатуре функции. В добавок объясняется как мне показалось не очень понятно.

Вот и пытаюсь понять, как оно работает. В книге пишется что на практике такое редко используется.

Ребят, еще раз мы создаем ссылку, в которую ложем разыминованый указатель т.е. прямой доступ к значению переменной?
Ссылка есть ссылка, указатель есть указатель. Не могу понять каким образом ссылка видит и сохраняет в себе разыминованый указатель. Т.е. если бы указатель сохранял ссылку в себе - понятно. А наоборот в добавок операция розыминования - до меня не доходит.
Возможно глупая ситуация, но все же..
И еще раз благодарю что разъясняите.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
22.04.2013, 17:12     Применение указателей #20
IvanInanovich, ссылка это всего лишь альтернативное имя переменной. Но в данном случае, переменная не имеет имени, т.к. создается динамически и сразу же разыменовывается.

P.S. Что у Вас с русским языком, IvanInanovich ?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.04.2013, 17:18     Применение указателей #21
Цитата Сообщение от IvanInanovich Посмотреть сообщение
создаем ссылку, в которую ложем разыминованый указатель
глагол "ложить" совершенного вида.

Добавлено через 2 минуты
Цитата Сообщение от IvanInanovich Посмотреть сообщение
Ссылка есть ссылка, указатель есть указатель. Не могу понять каким образом ссылка видит и сохраняет в себе разыминованый указатель. Т.е. если бы указатель сохранял ссылку в себе - понятно. А наоборот в добавок операция розыминования - до меня не доходит.
ну очевидно же: в данном случае ссылка - синтаксическая надстройка над указателем, неявно разыменующая его при каждом обращении, а хранится адрес, как и в указателе.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2013, 17:19     Применение указателей
Еще ссылки по теме:

Применение цикла for - C++
Недавно начал учить C++, дошел до циклов. while, do while понимаю, а вот for ну хоть убей не понимаю, вроде был разобрался, а потом снова...

применение typedef - C++
Какова роль "*node"(последняя строка) в данном случае? typedef struct rbtree_node { enum color color; void *key; void *value; ...

Применение итераторов - C++
Подскажите пожалуйста, в чем практичность итераторов, то бишь для чего нужны они в программах?

Применение цикла do-while - C++
Здравствуйте. Хочу зациклить выполнение функции до тех пор, пока не будет выполнено условие, но не получается. Программа успешно...

Рекурсия и её применение - C++
Такая задачка попалась: Напишите программу, которая запрашивает число и показатель степени. Напишите рекурсивную функцию, которая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6444 / 3083 / 306
Регистрация: 04.12.2011
Сообщений: 8,490
Записей в блоге: 4
22.04.2013, 17:19     Применение указателей #22
Цитата Сообщение от IvanInanovich Посмотреть сообщение
А наоборот в добавок операция розыминования - до меня не доходит.
Это просто и это ключ ко всему остальному. Разыменование указателя - процесс получения значения на которое он указывает:
C++
1
2
3
4
int a = 4;
int *ptr_a=&a;
int b=*ptr_a; //b=4 в b скопировано значение a
int &c=*ptr_a; //c ссылется на a так как ссылка на литерал 4 не имеет адреса и тут разыменование - доступ к переменной a
При удалении указателя (освобождении памяти) в Вашем примере образуется пустая ссылка dist. При выходе из области видимости она будет уничтожена. То есть главное до этого к ней уже не обращаться.
Yandex
Объявления
22.04.2013, 17:19     Применение указателей
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru