Ссылки vs указатели - в чем разница?21.11.2015, 20:04. Показов 17021. Ответов 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 | |
|
Указатели и ссылки [С++]
Ссылки и указатели Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
|
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|