C/C++

Ссылки и указатели

Доброго времени суток! Поясните, пожалуйста, чего такого могут ссылки, чего нельзя сделать с помощью указателей? Почему иногда нужно использовать именно ссылки, но нельзя указатели? Заранее спасибо.
А2
Ангел 2012
175
Технической разницы нет
Есть разница в синтаксисе. Ссылки - плюсовая фишка и не работает в си. Также когда передаёшь указатель на структуру или класс, то доступ к внутренним элементам, осуществляется через оператор ->, его вроде планируется убрать в 23 версии языка. В случае с ссылками всё действия происходят через оператор точка. Также, если работаешь с переменной, переданной как указатель, её надо разыменовывать приставкой *, а с ссылками это делать не надо. Короче, если пишешь на С++, то надо использовать ссылки, а если на Си то выбора нет - только указатели
Андрей Воробьев
Андрей Воробьев
7 902
Лучший ответ
Олег Ли "его вроде планируется убрать в 23 версии языка."

Откуда дровишки? Сильно сомневаюсь, комитет очень сильно старается не ломать компилируемость существующего кода, а тут поломается слишком много. Смахивает на бред, извините.
Для доступа к данным по указателю его следует разыменовать либо использовать косвенное обращение. Ссылка позволяет обращаться к данным по имени и напрямую.
Shahan Baikenzheyev
Shahan Baikenzheyev
96 381
Ничего, просто удобнее в обращении
Руслан *******
Руслан *******
70 442
"Поясните, пожалуйста, чего такого могут ссылки, чего нельзя сделать с помощью указателей? Почему иногда нужно использовать именно ссылки, но нельзя указатели? "
я бы спросил так:
"чего такого (опасного) могут указатели, что лучше отказаться от их использования везде, где возможно".
Sveta Guseva
Sveta Guseva
25 445
Алексей Скороходов А если бы спросили так, как бы вы ответили?))
Чего в указателях опасного?
Алексей Скороходов Я например стараюсь их лучше выучить чтоб использовать для экономии памяти.
"Поясните, пожалуйста, чего такого могут ссылки, чего нельзя сделать с помощью указателей? "

Функционально, ничего. С точки зрения семантики не получится переопределить некоторы операторы, другие не получится определить эффективно и пр, то есть не получится создавать пользовательские типа с полным функционалом.
Например, ссылка на rvalue или ссылка на константу могут продлевать время жизни временного объекта.
Примеры есть здесь: https://en.cppreference.com/w/cpp/language/reference_initialization#Lifetime_of_a_temporary
Лалло .
Лалло .
221