Ссылки в C++ для начинающих Поверхностное знакомство

Сайт не является учебником по программированию. Это только небольшой авторский сборник информации в помощь начинающим программистам.

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

— «Что такое ссылка?»

В стандартных определениях можно найти такое — Ссылка — это альтернативное имя, это псевдоним объекта и прочие определения, в которых говорится, что ссылка — это второе имя конкретного объекта.
На самом деле, чтобы лучше понять что такое ссылка нужно познакомиться с унарной операцией взятия адреса. Вот откуда бедному начинающему студенту знать что такое «унарный»? Унарный — это операция над одним операндом. А что такое операнд? — по мне это лишние слова, которые вносят некоторый сумбур в обучение и отвлекают от минимума необходимого

Чтобы понять что такое ссылка, нужно познакомится с операцией взятия адреса. Такая операция выполняется с помощью знака амперсанд &

В первом случае было использовано хорошо знакомое выражение, выводящее значение переменной на экран.
Во втором случае был использован знак & перед переменной. Этот знак сообщил компилятору, что автор программы хочет обратится к адресу переменной а. На экран может вывестись что-то типа a*fff4

В принципе тут вопросов не должно возникнуть, чтобы у переменной взять адрес по которому она лежит в памяти, нужно использовать знак & перед этой переменной

Ссылка почти тоже самое что и взятие адреса у переменной, только описывается она как переменная. Перед объявлением ссылки обязательно объявляют объект на который она указывает.

  •  Код C++ Ссылка Объявление ссылки

  Тут видно, что во время инициализации а, а берет адрес у переменной x, инициализировать дважды один объект нельзя, ссылка не исключение, поэтому на время своей жизни, переменной а будет соответствовать только тот адрес, который был ей присвоен во время объявления. В приведенном примере этот адрес есть адрес переменной x

Вот только после освоения и осознания приведенной информации впору говорить, что

 Ссылка — это псевдоним объекта

Код С++ Ссылка = Псевдоним объекта

  В приведенном коде показано почему говорят, что  ссылка — это второе имя. Вот есть некоторая обязательная переменная  x,  на которую ссылается ссылка. Если поменяли  x,  то поменялась и то что отображает ссылка, ссылающаяся на  x.  Во время объявления ссылки  а,    x  уже существует в природе, и в ссылку   a   записывается адрес, который был прописан компилятором для размещения значения   x. Получается, что переменная-ссылка а, ссылаясь по адресу переменной x,обращается к тому значению, которое в этот  x  записано.

Многих начинающих волнует вопрос, а чем, собственно ссылка отличается от указателя. Вроде и она и он работают с памятью и с объектами внутри памяти. Думаю правильно будет ответить на этот вопрос.

      —> Ссылка не может ссылаться на несуществующий объект, указатель может
     —>  Ссылку нельзя переназначить

В первом вы легко убедитесь если уберете объявление переменной   x.
Во втором вы убедитесь если попробуете присвоить ссылке значение другого адреса переменной

  • Код С++ Ссылку нельзя переназначить

В предыдущем примере было изменено значение переменной, на которую ссылка ссылается и это отобразилось на результате вывода переменной-ссылки на экран. В этом примере произошла попытка связать ссылку с адресом переменной y, но вышло не то, чего стоило бы ожидать незнающему человеку. Вместо переназначения адреса, была произведена обычная операция присвоения. По адресу на который ссылка ссылается присвоенное в ссылку значение и было записано, следовательно было перезаписано значение x. (хотели а=адрес y, а получили значение x = значение y)
В общем, смысл в том, что указателем можно тыкать в разные адреса, а ссылкой можно работать только по одному и тыкать ссылкой в другие адреса не получится

Подводя итоги акцентирую внимание на самом важном

  •   Ссылка — это второе имя переменной
  •   Ссылка обязательно ссылается на адрес уже существующего значения
  •   Во время объявление ссылки, ссылке обязательно присвоить значение на который ей придется ссылаться
  •   Ссылка ссылается на адрес объекта, но работает с самим объектом по этому адресу
  •   Ссылка обозначается знаком амперсанд &
  •   Нельзя поменять тот адрес, который был присвоен ссылке во время её объявления
  •   Обращение к ссылке происходит как обращение к обычной переменной
  •   Всякое изменение ссылки преобразует не саму ссылку, а объект, на адрес которого ссылается ссылка
  •   Тип ссылки должен совпадать с типом объекта на адрес которого она ссылается
  •    Изменение объекта влияет на отображение ссылки, так как ссылка своего рода многократный инициализатор одной и той же переменной

Продолжение знакомства с ссылками.

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

15 комментариев: Ссылки в C++ для начинающих Поверхностное знакомство

  • Gamedaw говорит:

    А что будет есть сделать так

    Автор сайта отвечает:
    В переменную b будет присвоено значение, взятое по второму имени переменной а
    в b запишется 300

  • Герр Маннелиг говорит:

    Спасибо, всё очень просто и доходчиво 🙂

  • Шван говорит:

    Спасибо, без воды объяснили.

  • Аноним говорит:

    Каждый понял своё. Часто неправильно.

  • настя говорит:

    я нихрена не поняла словечки какие то не понятные что такое сумбур? что за переменная?

  • настя говорит:

    я вообще далёкая но очень хочу научиться и везде вот эти непонятные слова , хоть словарь заводи

  • настя говорит:

    что за память какая память где она находиться зачем ёмаё

  • настя говорит:

    я уже 5 раз читаю и врубиться не могу

  • настя говорит:

    только не думайте что я тормоз , я просто хочу знать всё очень очень подробно

    • admin говорит:

      Нельзя же так с утра на людей наседать.
      Для начала достаточно знать, что ссылка — это второе имя переменной. Кличка, произвище.
      Очень подробно знать о ссылке на начальном уровне не нужно.
      Можно задавать разные названия на одну переменную. Вот и все.
      .
      У этой темы написано продолжение. Можно попробовать его прочитать, а потом буянить в комментарии.

  • настя говорит:

    что за адрес переменной «а»

  • Евгений говорит:

    Настя, адрес переменной «а» в оперативной памяти, вы бы для начала почитали, что такое программа и как она работает, ну и про ОЗУ тоже почитайте, а потом уже про ссылки и указатели на с/с++

  • Дарья говорит:

    Спасибо вам больше за то, что вы делаете и КАК объясняете. Я, в принципе, все понимаю из «классических» учебников, но как доходит дело до кода, нюансов и разложения по полочкам, то тут и всплывает типичный теоретик, не способный что-то правильно делать окромя того, что было разобрано в учебниках.

    Вы же просто магически все преподносите, лучшей конкретизации и многоступенчатого объяснения и не придумаешь.

    Вот честно — ОЧЕНЬ круто!

  • Spirit говорит:

    Я одного не понял — нафиг она нужна эта ссылка, если она всего лишь дублирует имя основной переменной?

  • Аноним говорит:

    да. Нафиг?

Добавить комментарий

Ваш e-mail не будет опубликован.

Поиск

 
     

Яндекс.Метрика

НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Ревнивая жена прочитала сообщения мужа в Фейсбуке и лайкнула его сковородкой.

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок