#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. Язык их таковыми считает, хотя толком ничего и не делает, чтобы они оставались инициализированными. Как и всегда в крестах, полработы ложится на программиста. Все остальные свойства ссылок вытекают из свойства инициализированности.
Комментариев нет:
Отправить комментарий