#cpp #указатели
На данный вопрос уже ответили: Чем отличаются ссылки от указателей в С++ 2 ответа #includeusing namespace std; void display_ptr(int *ptrint) { cout << *ptrint << endl; } void display_addr(int &toint) { cout << toint << endl; } int main() { int i{ 10 }; display_ptr(&i); display_addr(i); } В данном примере для меня непонятны возможности конструкции с указателем, по сравнению с передачей значения по ссылке. Как видно, чтобы использовать значение по указателю, нужно достать его с помощью *, а еще передать в аргумент с помощью &. Используя передачу по ссылке, ничего не нужно кроме указания в самом параметре, при этом значение также не копируется и его также можно изменять по ссылке. Не совсем понимаю какой профит у указателей, если намного удобней передавать значение по ссылке.
Ответы
Ответ 1
Если с инглишем хорошо, то милости просим на англоязычный стэковерфлов. Если в двух словах: Ссылку нельзя перенацелить Нельзя создать ссылку на ссылку Указатель можно обнулить Указатели поддерживают адресную арифметику(+, -, ++, --) Указатель нужно разыменовывать Указатель является переменной, которая содержит адрес памяти. Вне зависимости от того, как реализуется ссылка, ссылка имеет тот же адрес памяти что и элемент на который она ссылается. Ссылки нельзя поместить в массив Можно создавать константные ссылки на временные объектыОтвет 2
Главное это то, что ссылки всегда инициализированные. То есть не бывает нулевых ссылок, а битые ссылки это UB. Язык их таковыми считает, хотя толком ничего и не делает, чтобы они оставались инициализированными. Как и всегда в крестах, полработы ложится на программиста. Все остальные свойства ссылок вытекают из свойства инициализированности.
Комментариев нет:
Отправить комментарий