Сравнительная таблица
Основа для сравнения | Указатель | Ссылка |
---|---|---|
основной | Указатель является адресом памяти переменной. | Ссылка является псевдонимом для переменной. |
Возвращает | Переменная указателя возвращает значение, расположенное по адресу, хранящемуся в переменной указателя, которому предшествует знак указателя '*'. | Ссылочная переменная возвращает адрес переменной, перед которой стоит ссылочный знак '&'. |
операторы | *, -> | & |
Нулевая ссылка | Переменная-указатель может ссылаться на NULL. | Ссылочная переменная никогда не может ссылаться на NULL. |
инициализация | Неинициализированный указатель может быть создан. | Неинициализированная ссылка никогда не может быть создана. |
Время инициализации | Переменная-указатель может быть инициализирована в любой момент времени в программе. | Ссылочная переменная может быть инициализирована только во время ее создания. |
переинициализация | Переменная-указатель может быть повторно инициализирована столько раз, сколько требуется. | Переменная-ссылка никогда не может быть повторно инициализирована в программе. |
Определение указателя
«Указатель» - это переменная, которая содержит место в памяти другой переменной. Операторы, используемые переменной-указателем - это * и ->. Объявление переменной указателя содержит базовый тип данных, за которым следует знак «*» и имя переменной.
тип * var_name;
Давайте разберем указатель с помощью примера.
int a = 4; int * ptr = & a; соиЬ <Здесь у нас есть целочисленная переменная a и переменная-указатель ptr, в которой хранится адрес переменной a.
Указатель Арифметика
Переменная-указатель может работать с двумя арифметическими операторами: «сложение» и «вычитание». Сложение называется «приращением», а вычитание - «уменьшением». Когда переменная-указатель увеличивается, она указывает на место в памяти следующей переменной ее базового типа. Когда переменная-указатель уменьшается, она указывает на место в памяти предыдущей переменной ее базового типа. Следовательно, массив может быть эффективно доступен с помощью переменной указателя.
Множественная косвенность
Указатель указывает на другую переменную указателя, которая указывает на целевое значение. Этот тип указателя всегда инициализируется с адресом другой переменной указателя. Объявление указателя на указатель выглядит следующим образом.
тип ** var_name;Давайте изучим это на примере.
int a = 4; int * ptr1 = & a; int ** ptr2 = & ptr1; соиЬ <Указатель на функцию
Поскольку мы знаем, что функция не является переменной, она все же имеет область памяти, которая может быть назначена переменной-указателю. Как только указатель указывает на функцию, функция может быть вызвана с указателем этой функции.
Важные моменты, которые нужно помнить о указателе.
- Переменная-указатель может быть создана без ее инициализации и может быть инициализирована в любом месте программы.
- Переменная-указатель может быть повторно инициализирована для другой переменной.
- Переменная-указатель может ссылаться на NULL.
Определение ссылки
Ссылочная переменная используется для ссылки на переменную, которая назначена этой ссылочной переменной. Оператор, используемый ссылочной переменной, это '&'. Объявление ссылочной переменной содержит базовый тип, за которым следует знак «&», а затем имя переменной.
введите & refer_var_name = var_ name;Здесь типом является тип данных, а оператор & подтверждает, что это ссылочная переменная. Refer_var_name - это имя ссылочной переменной. Var_name - это имя переменной, на которую мы хотим ссылочную переменную ссылаться.
Давайте разберем справочную переменную с помощью примера.
int a = 4; int & b = a; // b ссылается на ab = 6; // теперь a = 6Здесь переменной типа int присваивается значение 4. Ссылочной переменной присваивается переменная a, то есть b является псевдонимом a. Теперь, когда мы присваиваем другое значение b, мы модифицируем значение a. Следовательно, можно сказать, что изменения, внесенные в эталонную переменную, также будут происходить в переменной, на которую ссылается эта эталонная переменная.
Наиболее важным моментом является то, что ссылочная переменная должна быть инициализирована во время ее создания. Как только ссылочная переменная инициализируется с помощью переменной, ее нельзя повторно инициализировать для ссылки на другую переменную. В тот момент, когда вы присваиваете значение ссылочной переменной, вы присваиваете это значение переменной, на которую указывает ссылочная переменная. Ссылочная переменная никогда не может ссылаться на NULL. Арифметика не может быть выполнена для ссылочной переменной.
Ссылочная переменная может использоваться тремя способами:
- В качестве возвращаемого значения функции.
- В качестве параметра функции.
- Как отдельная ссылка.
Ключевые различия между указателем и ссылкой
- Ссылка похожа на создание другого имени для ссылки на переменную, чтобы на нее можно было ссылаться под разными именами. С другой стороны, указатель - это просто адрес памяти переменной.
- Переменная-указатель, если ей предшествует '*', возвращает значение переменной, адрес которой хранится в указателе varaible. Ссылочная переменная, когда ей предшествует '&', возвращает адрес этой переменной.
- Операторы указателя * и ->, тогда как оператор ссылки &.
- Переменная-указатель if не содержит адреса какой-либо переменной и указывает на ноль. С другой стороны, ссылочная переменная никогда не может ссылаться на Null.
- Вы всегда можете создать унитизированную переменную указателя, но мы создаем ссылку, когда нам нужен псевдоним некоторой переменной, чтобы вы никогда не могли создать унитализованную ссылку.
- Вы можете повторно инициализировать указатель, но после инициализации arefernce вы не сможете повторно инициализировать его снова.
- Вы можете создать пустой указатель и инициализировать его в любое время, но вы должны инициализировать ссылку только при создании ссылки.
Замечания:
Java не поддерживает указатели.
Заключение
Указатель и ссылка используются для указания или ссылки на другую переменную. Но оба отличаются по своему использованию и реализации.