Страницы

Поиск по вопросам

суббота, 6 октября 2018 г.

Зачем указатель, если есть ссылка? [дубликат]

На данный вопрос уже ответили: Чем отличаются ссылки от указателей в С++ 2 ответа #include using 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); }
В данном примере для меня непонятны возможности конструкции с указателем, по сравнению с передачей значения по ссылке.
Как видно, чтобы использовать значение по указателю, нужно достать его с помощью *, а еще передать в аргумент с помощью &
Используя передачу по ссылке, ничего не нужно кроме указания в самом параметре, при этом значение также не копируется и его также можно изменять по ссылке.
Не совсем понимаю какой профит у указателей, если намного удобней передавать значение по ссылке.


Ответ

Если с инглишем хорошо, то милости просим на англоязычный стэковерфлов. Если в двух словах:
Ссылку нельзя перенацелить Нельзя создать ссылку на ссылку Указатель можно обнулить Указатели поддерживают адресную арифметику(+, -, ++, --) Указатель нужно разыменовывать Указатель является переменной, которая содержит адрес памяти. Вне зависимости от того, как реализуется ссылка, ссылка имеет тот же адрес памяти что и элемент на который она ссылается. Ссылки нельзя поместить в массив Можно создавать константные ссылки на временные объекты

Комментариев нет:

Отправить комментарий