Страницы

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

воскресенье, 1 декабря 2019 г.

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

#cpp #указатели



    На данный вопрос уже ответили:
    
        
            Чем отличаются ссылки от указателей в С++
                
                    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);
}


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

Как видно, чтобы использовать значение по указателю, нужно достать его с помощью
*, а еще передать в аргумент с помощью &.

Используя передачу по ссылке, ничего не нужно кроме указания в самом параметре, при
этом значение также не копируется и его также можно изменять по ссылке.  

Не совсем понимаю какой профит у указателей, если намного удобней передавать значение
по ссылке.
    


Ответы

Ответ 1



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

Ответ 2



Главное это то, что ссылки всегда инициализированные. То есть не бывает нулевых ссылок, а битые ссылки это UB. Язык их таковыми считает, хотя толком ничего и не делает, чтобы они оставались инициализированными. Как и всегда в крестах, полработы ложится на программиста. Все остальные свойства ссылок вытекают из свойства инициализированности.

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

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