Ссылки vs указатели - в чем разница?21.11.2015, 20:04. Показов 17074. Ответов 150
Метки нет (Все метки)
Навеяно соседней темой. Не понимаю в чем разница, хотя несколько раз честно пробовал почитать на эту тему, правда без должного внимания и усердия. Зато программировал на ассемблере и чистом С, понимаю абстракцию "адрес ячейки памяти" и "размер типа в байтах", с арифметикой указателей и указателями на указатели сложностей вроде не испытываю
Есть переменная, если она не регистровая - то лежит в какой-то ячейке памяти (или нескольких, зависит от разрядности памяти и структуры типа переменной), адрес этой ячейки (ака указатель) я могу запоминать в другую переменную типа указателя, передавать/возвращать ее из функций, инкрементировать/декрементировать для движения по массиву переменных (если я его предварительно нарезал в той области памяти конечно), разыменовывать и получать/изменять значение. Вроде все. При чем тут термин "ссылки"? А еще оказывается бывают смартпоинтеры, умные указатели и прочие страшные слова
0
|
|
| 21.11.2015, 20:04 | |
|
Ответы с готовыми решениями:
150
в чем разница? массивы и указатели строк |
| 22.11.2015, 00:56 [ТС] | |
|
Пока я ходил на каток, похоже, пропустил много интересного и уже безвозвратно зачищенного
![]() По-хорошему, надо курить ссылку от Nosey. Но на уровне манки-ламера можно наверное сформировать некоторый условно похожий на правду образ семантического эквивалента данных абстракций, не вдаваясь в детали. В конце концов, в одном известном мне языке нет прямого доступа к памяти, более того - он вообще интерпретируемый, но при этом возможно указать вариант передачи параметра в функцию - по значению или по ссылке - с соответствующим предсказуемым поведением.
0
|
|
|
Комп_Оратор)
|
|||
| 22.11.2015, 01:23 | |||
![]() Хотя конечно, если кратко, то ссылка отличается от указателя тем, что она ссылка. Все остальные варианты будут страдать неполнотой, даже если горы книжек перепечатать.
1
|
|||
| 22.11.2015, 01:37 [ТС] | |
|
Пробую собрать зачатки мыслей на уровне манки-кодера, без л-р-х-валью.
Указатели - это про память. Это прямой адрес памяти (реальный/виртуальный - неважно). Что при этом лежит по данному адресу - неизвестно. Вообще-то типизирован, но можно запросто перетипизировать - и прочитать/записать по адресу стартовой ячейки совсем другой тип: например, записали 4 байта инта, потом перетипизировали к чару и прочитали 4 однобайтовых чара по смещению. Море возможностей - море ответственности и вариантов отстрелить ногу. Можно делать указатели на указатели и т.п. и складывать их в любые контейнеры. Является значением первого класса - может передаваться/возвращаться из функций и присваиваться переменным, можно прибавлять/вычитать смещения и получать новые адреса памяти. Ссылки - это про вариант передачи параметров в функцию - и все. Нельзя делать больше ничего. Просто чтобы функция не создавала локальную копию исходного объекта, а ссылалась на него и изменяла если надо. Поэтому больше ничего нельзя - ни вернуть, ни запихнуть в контейнеры, ни записать в переменную. Но и отстрелить ногу тоже возможностей меньше. А фактически за кадром - реализуются как сахар через те же указатели. Много я неправ? Много я упустил?
0
|
|
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||||||||||||||||||
| 22.11.2015, 01:58 | ||||||||||||||||||
0
|
||||||||||||||||||
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
||||
| 22.11.2015, 02:32 | ||||
|
1
|
||||
|
Комп_Оратор)
|
||||||
| 22.11.2015, 02:55 | ||||||
|
_Ivana, это конечно в основном для передачи в функцию сделано, но если напрячься можно здорово оттянуться. Вот Андрей смотри какой счетчик. Совершенно безопасный. Деревянный можно сказать:
1
|
||||||
| 22.11.2015, 03:07 [ТС] | |
|
IGPIGP, отформатировал для читаемости и разбираю ваш пример. Функция возвращает именно ссылку на свою статическую переменную, и поэтому можно в месте вызова интрементировать ее? Да, этот вариант я не предполагал
0
|
|
|
Комп_Оратор)
|
||||||||||||||
| 22.11.2015, 11:04 | ||||||||||||||
![]() Добавлено через 22 минуты А вот ещё весёлое место. Посмотрим тело функции не глядя в сигнатуру:
![]() И это только кажется.
0
|
||||||||||||||
|
|
|
| 22.11.2015, 12:01 | |
|
На всякий случай. Пример с ссылками и эквивалентный им код с указателями
Сравнение указателей и ссылок. Добавлено через 3 минуты Ссылки и указатели Можно ли для стд::вектор'а взять адрес и-го элемента?
4
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 22.11.2015, 14:14 | |||||||
|
обращение к ссылке, это на самом деле обращение к оригинальному объекту. вам нужно ответить себе на один единственный вопрос: вот есть у вас указатель. чем является реультат разыменовывания указателя?
ответите на этот вопрос, и все встанет на свои места.
2
|
|||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 22.11.2015, 14:25 | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 22.11.2015, 14:35 | ||
|
из-за которых неокрепшие умы начинают путать причину и следствие.
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 22.11.2015, 14:49 | |||||||
|
что бы упростить материал. на самом деле на практике различие не сильно существенное. ровно до тех пор, пока речь не заходит о концептуальных различиях. я приведу пример. поскольку ссылка - всевдоним оригинального объекта, а все действия над ссылкой - есть действия над оргинальным объектом, то например, взятие размера ссылки - это взятие размера оригинального объекта. и вот здесь мы можем попадать на интересные порадоксы: может ли размер отдельного члена класса быть больше, чем размер всего класса вместе взятого? да не вопрос:
в областях, где важны свойства типов. но для обычного прикладного программиста - разница между ссылкой, и автиоразыменовывающимсчя указателем должна быть не принципиальной.
2
|
|||||||
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
|||||||
| 22.11.2015, 14:57 | |||||||
1
|
|||||||
|
Комп_Оратор)
|
|||
| 22.11.2015, 15:06 | |||
|
А для новичков главное понять как работает передача аргументов в параметры-ссылки. Этого вполне достаточно чтобы вдоволь поучиться.
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||
| 22.11.2015, 15:17 | |||||||||||||
|
так ещё и не компилируется. когда вы уже научитесь по человечесчки выкладывать материал? пример: по возможности указываем ссылку на онлайн компилятор, с примером-иллюстрацией http://rextester.com/CKLP43241 далее выкладываем исходный код:
бегать за вами, и подбирать после вас недостающие куски кода - это неуважение к чужому времени. Добавлено через 6 минут более того. на самом деле, ссылка - единственный тип данных на языке с++, который в принципе не обладает квалификатором const. лично я однажды обжегся на этом в метапрограммировании: обычно константными ссылками называют ссылки, которые ссылаются на неизменяемые объекты. но в реальности это - полная фигня. потому что : http://rextester.com/ENTQ87083
1
|
|||||||||||||
| 22.11.2015, 15:17 | |
|
Указатели и ссылки [С++]
Ссылки и указатели Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 30. Фосфорный и азотный замки по "честному" закону лимитирования Либиха
anaschu 16.07.2026
Основные достижения за последние дни
1. Механизм отложенного высвобождения фосфора
Добавлен специальный пул для медленного разложения меланизированных гиф ЕСМ
Реализована разная скорость. . .
|
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2.
Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
|
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её.
Всё это стресс конечно. Почему?. . .
|
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот.
Ларри Уингет
|
|
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|