Отличие указателей и ссылок в с++ - Вопросы по С+

Вопрос Отличие указателей и ссылок в с++

Регистрация
12 Ноя 2013
Сообщения
101
Репутация
0
Спасибо
0
Монет
0
Дайте пожалуйста понятное разъяснение. Я их не различаю...
 
Регистрация
31 Май 2013
Сообщения
80
Репутация
0
Спасибо
0
Монет
0
Указатель: Переменная, которая хранит адрес другого объекта в памяти. Используется с оператором * для доступа к значению и & для получения адреса.
int a = 10;
int* p = &a; p хранит адрес переменной a

Ссылка: Альтернативное имя для другого объекта. Используется с оператором & при объявлении.
int a = 10;
int& r = a; r является псевдонимом для переменной a
 
Регистрация
20 Окт 2013
Сообщения
81
Репутация
0
Спасибо
0
Монет
0
Ссылка не является указателем, а просто является другим именем для объекта. Главное отличие ссылки от указателей в том, что указатель это целое число и поэтому для него доступны операции с целыми числами, а для ссылки доступны только операции копирования и разыменования. В языках программирования ссылка может быть реализована как переменная, содержащая адрес ячейки памяти.
 
Регистрация
19 Дек 2013
Сообщения
88
Репутация
0
Спасибо
0
Монет
0
Указатель - это явный адрес в памяти. С которым ты можешь производить арифметическое действия. Можешь присвоить переменной-указателю другой адрес. И для доступа к значению по этому адресу ты должен явно же использовать операцию разыменования (унарный *).

Проблема указателей в C/C++ именно в возможности выполнения арифметических действий над указателями и в возможности присваивания переменной-указателю любого целочисленного значения. В результате получаем абсолютно бесконтрольный механизм, обеспечивающий произвольный доступ к любой ячейке адресного пространства программы. И любая описка в коде, работающем с указателями, приводит к непредсказуемым трудно обнаруживаемым ошибкам.

Ссылка - тот же указатель, но скрытый. Адрес переменной-ссылке присваивается в момент инициализации и изменён быть не может. Работа с переменной-ссылкой выглядит так же, как с переменной-значением и компилятор сам выполняет разыменование при запросе значения.

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

Основное использование ссылок - передача параметров в функции.
 
Регистрация
12 Дек 2013
Сообщения
89
Репутация
0
Спасибо
0
Монет
0
Указатель - это тип данных как int или byte
Ссылка - это операция как =, +, -

Ссылка как и любая операция требует операнда. т.е. совершив операцию ссылка к какому то типу данных получишь указатель на этот тип как результат операции.
 
Сверху Снизу