Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

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

по поводу указателей. Как правильно задавать массив указателей и его удалять? - C++
Т.е., например создаю указатель: TPoint *p_Point=NULL; а если массив? TPoint *p_MassPoint; //=?; как массив обнулить не ясно ...

Почему в сортировке указателей на объекты в вызове функции используются адреса объектов, а не указателей? - C++
Доброго времени суток! Рассматриваю пример (из Лафоре) сортировки массива указателей на объекты, для чего используются указатели на...

Объяснить различия в работе указателей на целое число и указателей на const char (строки в стиле Си) - C++
Уважаемые программисты, возникло несколько вопросов касательно указателей. Почему при выводе указателя на int нужна звёздочка (*), а...

Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей - C++
Задача: создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей. Вернуть адрес...

21
taras atavin
3570 / 1753 / 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;
.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
22.04.2013, 14:37 #17
Цитата Сообщение от taras atavin Посмотреть сообщение
Лучше, как здесь уже предлагалось, сделать ссылку на сам указатель
Цитата Сообщение от taras atavin Посмотреть сообщение
А нафига?
Действительно, нафига?
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.04.2013, 15:13 #18
Цитата Сообщение от Tulosba Посмотреть сообщение
Действительно, нафига?
Ну если ему охота иметь ссылку.
0
IvanInanovich
0 / 0 / 0
Регистрация: 03.01.2013
Сообщений: 113
22.04.2013, 17:02  [ТС] #19
Дело тут не в принципиальности)).
До этого, в книге встречались только передачи по ссылке аргументов в функции.
А тут определение идет и инициализация не в сигнатуре функции. В добавок объясняется как мне показалось не очень понятно.

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

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

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

Добавлено через 2 минуты
Цитата Сообщение от IvanInanovich Посмотреть сообщение
Ссылка есть ссылка, указатель есть указатель. Не могу понять каким образом ссылка видит и сохраняет в себе разыминованый указатель. Т.е. если бы указатель сохранял ссылку в себе - понятно. А наоборот в добавок операция розыминования - до меня не доходит.
ну очевидно же: в данном случае ссылка - синтаксическая надстройка над указателем, неявно разыменующая его при каждом обращении, а хранится адрес, как и в указателе.
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3142 / 307
Регистрация: 04.12.2011
Сообщений: 8,673
Записей в блоге: 5
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. При выходе из области видимости она будет уничтожена. То есть главное до этого к ней уже не обращаться.
1
22.04.2013, 17:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2013, 17:19
Привет! Вот еще темы с ответами:

Создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей - C++
Нужно создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей. Эта специализация...

Различия указателей char* от указателей других типов - C++
Помогите пожалуйста разобраться! Прочитал раздел про указатели и даже вроде бы понял. Что касается указателей на тип int. Но что...

Как обойтись без указателей и указателей на указатель? - C++
Ибо не совсем выходит понять,что на что тут указывает #include "stdafx.h" #include <iostream> #include <stdlib.h> using namespace...

Создание массивов указателей на массивы указателей - C++
Помогите в решении задачи: создал массив указателей на массивы указателей на строки, но компилятор ругается на то что не может...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Опции темы

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