![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 22.02.2009
Сообщений: 65
|
![]()
Доброго времечка, господа. ни как не могу победить разницу в ссылках и указателях. в чем принципиальная разница? и одна и другая ссылаются на значение в памяти переменной, обе позволяют ее изменять....указатель не может, вроде, работать с адресом переменной. зачем их две одинаковые????
|
![]() |
![]() |
![]() |
#2 |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
![]()
ссылка = защищенный указатель
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 22.02.2009
Сообщений: 65
|
![]() |
![]() |
![]() |
![]() |
#4 |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
![]()
см. Адресная арифметика
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 08.07.2010
Сообщений: 505
|
![]()
Знающий не говорит, говорящий не знает (С) Лао Цзы
|
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]() Цитата:
Ссылка предполагает работу с реальным объектом, и не должна быть nullptr. Любое действие над ссылкой - есть действие над оригинальным объектом. Все эти факторы делают работу с ссылками проще, безопаснее, и интуитивно понятнее, чем с указателями. Распространенная ошибка новичков: http://rextester.com/DZZRH5563 Код:
А потом он изменяется внутри функции Foo на массив из 20 чисел 66. Однако, вывод after в консоль показывает: содержимое массива не изменилось. На самом деле этот код содержит утечку памяти и потенциальную мину замедленного действия. Все дело в том, что все аргументы функции копируются. Внутри функции Foo модифицируется копия указателя, а не оргинал. Оригинал остается без изменений, и по окончанию функции указывает на невалидные данные. Последствия - не предсказуемы. Теперь рассмотрим аналогичный код но и с использованием ссылок: http://rextester.com/ZBD32753 Теперь в качестве аргумента фигурирует ссылка. А так как все действия над ссылкой есть действие над оригиналом, то модифицируется оригинальный указатель, и поведение программы совпадает с ожидаемым. А ещё, ссылки на языке с++ не обладают идентичностью. Это единственный тип данных на языке у которого не существует объекта. |
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ссылки, указатели, динамическая память, С++ | TRIZER | Помощь студентам | 9 | 01.08.2013 16:54 |
указатели и ссылки | Trampcher | Visual C++ | 1 | 02.06.2013 21:27 |
указатели и ссылки | syrga | Общие вопросы C/C++ | 10 | 18.01.2012 06:19 |
указатели vs ссылки | Aistn | Общие вопросы C/C++ | 9 | 01.06.2011 23:02 |
ссылки и указатели. | mojohead | Помощь студентам | 13 | 14.01.2011 16:00 |