4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32

Ссылки vs указатели - в чем разница?

21.11.2015, 20:04. Показов 17309. Ответов 150
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Навеяно соседней темой. Не понимаю в чем разница, хотя несколько раз честно пробовал почитать на эту тему, правда без должного внимания и усердия. Зато программировал на ассемблере и чистом С, понимаю абстракцию "адрес ячейки памяти" и "размер типа в байтах", с арифметикой указателей и указателями на указатели сложностей вроде не испытываю Есть переменная, если она не регистровая - то лежит в какой-то ячейке памяти (или нескольких, зависит от разрядности памяти и структуры типа переменной), адрес этой ячейки (ака указатель) я могу запоминать в другую переменную типа указателя, передавать/возвращать ее из функций, инкрементировать/декрементировать для движения по массиву переменных (если я его предварительно нарезал в той области памяти конечно), разыменовывать и получать/изменять значение. Вроде все. При чем тут термин "ссылки"? А еще оказывается бывают смартпоинтеры, умные указатели и прочие страшные слова
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.11.2015, 20:04
Ответы с готовыми решениями:

Указатели и ссылки: в чем разница
Здравствуйте, объясните, пожалуйста, в чем разница между "ссылается" и "указывает"?

Указатели и ссылки: в чём их разница и сходство?
Я начал учить с++ и не могу кое в чём разобраться. Кто знает ответы на эти вопросы может ответить или скинуть какую нибудь ссылку где это...

в чем разница? массивы и указатели строк
В примере Дейтла ( в документе ) массивы строк инициализируются через указатели, при этом компилятор выдает ошибки. Я же инициализоравал...

150
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.12.2015, 22:45
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от DrOffset Посмотреть сообщение
такое вполне может
Цитата Сообщение от DrOffset Посмотреть сообщение
Как правило
я же и говорю, - не обязан. И опять не придумал, - пишут везде. Потому и решил, что const повышает шансы/снижает вычислительную нагрузку, то есть помогает. И так и написал - "подсказка". Слово inline это же тоже подсказка/рекомендация. Не понимаю в чём спор.
Как-то всё сводится к тому у кого компилятор толще.
Так я везде и пишу, что не профи программист.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
03.12.2015, 23:05
Цитата Сообщение от IGPIGP Посмотреть сообщение
Потому и решил, что const повышает шансы/снижает вычислительную нагрузку, то есть помогает
Для компилятора const нужен в случаях типа:

C++
 // тела обеих функций для компилятора не видны
extern void foo (const int&);
extern void bar (int&);
 
int x, y;
 
void func (void)
{
  int a = 0;
  foo (a);
  x = a;
  bar (a);
  y = a;
}
Глядя на такой код компилятор вполне мог бы понять, что "x = 0", т.к. вызов функции foo значение переменной "a" не меняет. Но про значение "y" уже ничего сказать нельзя, т.к. bar может и поменять значение "a". Но по факту g++ эту оптимизацию не делает. Возможно из-за того, что слишком много в мире софта, где программисты делают всякие сопли с преобразованием указателей/ссылок (чтобы снять признак const) и всё равно модифицируют параметры. Вполне возможно, что есть опция со смыслом "доверять квалифиактору const", которая по умолчанию выключена

Цитата Сообщение от IGPIGP Посмотреть сообщение
Слово inline это же тоже подсказка/рекомендация
В Си++ это намного больше, чем подсказка/рекомендация - https://www.cyberforum.ru/blogs/18334/blog93.html
3
03.12.2015, 23:16

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Не понимаю в чём спор.
Спор? Ни в коем случае. Тебе показалось :)

0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.12.2015, 23:24
Цитата Сообщение от Evg Посмотреть сообщение
В Си++ это намного больше, чем подсказка/рекомендация
Спасибо, с интересом прочёл. Однако в контексте разговора и так ушедшего от ссылок я имел виду, что ничего там не гарантировано и логично полагать что const помогает.
Ну давайте скажем, что не const ни inline не помогают. Я не берусь их сравнивать, - боже упаси. Тема и так ушла в туман.

Добавлено через 4 минуты

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
Спор? Ни в коем случае. Тебе показалось
Согласие есть продукт при /*полном*//* хотя бы частичном*/ непротивлении сторон. Классика):pardon:
С точки зрения матлогики остальное - несогласие/спор. :)
Рад был пообщаться.:friends:

0
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,829
03.12.2015, 23:29
Цитата Сообщение от IGPIGP Посмотреть сообщение
Ну давайте скажем, что не const ни inline не помогают.
Мы можем сказать, что зависит от реализации.
Однако, как правило, программисты не работают на бесконечном множестве реализаций. У меня вот используются 4 аппаратные платформы и 3 ОС. Также 3 разных компилятора. Их способности к оптимизации на этих платформах известны, поэтому можно делать прогнозы.

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
С точки зрения матлогики остальное - несогласие/спор.
Разве я писал, что не согласен. Я просто ответил на твои вопросы в посте. Ну пусть там не было знаков вопроса, но ты же сказал, что не уверен. Вот я и уточнил :)
Никакого спора, правда :)

0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
03.12.2015, 23:37
Цитата Сообщение от IGPIGP Посмотреть сообщение
Однако в контексте разговора и так ушедшего от ссылок я имел виду, что ничего там не гарантировано и логично полагать что const помогает
Чтобы не ломать язык об терминологию сразу скажу, что везде про const имеются в виду "const int *p" и "const int &p"

const на параметрах-указателях по замыслу разработчиков языка должен был помогать оптимизациям ещё в Си. И на моей памяти я когда-то работал с каким-то компилятором, который это учитывал. Но реальная жизнь оказалась такова, что очень много разработчиков попросту не умеют программировать и с const-указателями работают неправильно. Пока компиляторы были слабые, они далеко в оптимизации не закапывались и эти ошибки никак не проявлялись. Но потом компиляторы стали умнее, а софт остался старый и с ним было много проблем именно из-за старых ошибок. Вполне возможно, что нежелание современных компиляторов учитывать const-указатели в параметрах (проверял на gcc, clang, suncc) обусловлено именно этим.

const-ссылка с точки зрения внутреннего устройства компилятора является прямым наследником const-указателей. И если бы компиляторы нормально работали с const-указателями, то всё бы отнаследовалось и в const-ссылках. В этом смысле const на параметрах-указателях и параметрах-ссылках можно сказать, что помогает компилятору

Другое дело inline. В реальности он уже давно никому не помогает, компиляторы давно научились сами всё решать. В языках Си, Си99, gnu-Си, Си++ на ключевое слово inline нагружены различные смыслы. И здесь, как мне кажется, у ключевого слова inline была судьба схожая ключевому слову auto. На "inline" нагрузили разные смыслы в разных языках, потому как изначальный смысл (подсказка/просьба компилятору) стал ненужным
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.12.2015, 23:45

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
Мы можем сказать, что зависит от реализации.
Опять не понял. Есть же 3 случая:
-помогают;
-безразлично;
-мешают
И кроме всего, то что зависит от реализации разве есть смысл обсуждать в "ссылки и указатели" для новичков? У них и так глаза квадратные. :scratch:
Цитата Сообщение от DrOffset Посмотреть сообщение
Никакого спора, правда
Вот на этом и хочу закончить.:)
:senor:



Добавлено через 6 минут

Не по теме:

Цитата Сообщение от Evg Посмотреть сообщение
В этом смысле const на параметрах-указателях и параметрах-ссылках можно сказать, что помогает
Хух... Я знал, что когда-то мы придём к общему углу зрения. Я хорошо понимаю различие в глубине. Но общий угол это уже объединяющее начало. :handshake:
:)

0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
03.12.2015, 23:57
Думаю, что это будет интересно почитать хоть кому-то))
https://docs.google.com/docume... sp=sharing
2
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
04.12.2015, 10:33
Цитата Сообщение от ct0r Посмотреть сообщение
Думаю, что это будет интересно почитать хоть кому-то))
На первом же примере увидел то же самое, что и во вчерашних экспериментах: компилятор не делает оптимизацию там, где в теории он должен её делать. Запускал "clang -O3". Если у кого-то получится эффект, озвученный в комментариях к примером, расскажите, каким компилятором и с какими опциями сей эффект получился

Добавлено через 4 минуты
А... не дочитал. Там так и написано "Examples 1 and 5 are never optimized as desired, while"
0
04.12.2015, 12:22

Не по теме:

Это эталонного тупняка тред?
От этого треда странное ощущение.

На первый взгляд кажется, что обсуждают с серьёзным видом какую-то очевидную хрень, про которую вопросов вообще возникать не должно.

Потом думаешь: ну не может же быть так, чтобы это были живые разумные люди. Наверное только я по невежеству вижу какую-то элементарную хрень, а на самом деле тут очень тонкий и сложный вопрос, по которому можно защитить не одну диссертацию и написать парочку увесистых монографий.

Потом ещё раз смотришь и думаешь: да нет, хрень какая-то. :D

0
04.12.2015, 13:29

Не по теме:

Voivoid, всё базово архисерьёзное есть в книгах. Мы же говорим либо о каких-то нюансах, которые в книгах найти трудновато, либо о том, что найти просто, но под каким-то необычным углом, поскольку традиционный подход может быть кому-то труден и нужна параллельная информация для сравнения .
Или для разнообразия, как самостоятельной ценности, в конце концов. Иначе же если дублировать то что есть везде, то смысл теряется и выходит вроде работы на лентяя.
Называть ли это личным подходом или отсебятиной, это вопрос доброжелательности. Тем не менее, на маразм нужно реагировать обязательно. :pardon:
Хотя конечно, на конкретные и узкие вопросы, на которые возможен лаконичный ответ так наверное не стоит отвечать. А мало ли праздников общения в сети?
Могу лишь предполагать, что и этот получился на славу. Вы не остались равнодушны. :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.12.2015, 13:29

Ссылки и указатели - в чем преимущество одного над другим
Известно, что главной причиной появления ссылок в С++ было дать более безопасную альтернативу указателям в некоторых ситуациях. Ссылка в...

Ссылки и указатели
Добрый день. Возможно было. В чем существенная разница между передачей данных в функцию по ссылке или указателю. В каких случаях вы бы...

Указатели и ссылки [С++]
Всем привет. я тут программу делаю. Цель: определить,принадлежит ли точка заданному промежутку(а точнее лежит внутри или снаружи фигуры)....

Ссылки и указатели
Вот есть код в котором я проверял как ведут себя указатели : using namespace std; int* first() { int p = 5; cout <<...

Ссылки и указатели
Здравствуйте, может кто объяснить в чем будет отличие при передаче в функцию по **, *, *&, &(**), желательно на примерах простых


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

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

Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru