Указатели C ++ легки и забавны в освоении. Некоторые задачи C ++ выполняются с помощью указателей, а другие задачи C ++, такие как динамическое выделение памяти, не могут быть выполнены без них.
Как вы знаете, каждая переменная является ячейкой памяти, и каждая ячейка памяти имеет свой адрес, к которому можно обратиться, используя оператор амперсанда (&), который обозначает адрес в памяти. Рассмотрим следующее, которое выведет адрес определенных переменных:
#include <iostream> using namespace std; int main () { int var1; char var2[10]; cout << "Address of var1 variable: "; cout << &var1 << endl; cout << "Address of var2 variable: "; cout << &var2 << endl; return 0; }
Когда приведенный выше код компилируется и выполняется, он дает следующий результат —
Address of var1 variable: 0xbfebd5c0 Address of var2 variable: 0xbfebd5b6
Что такое указатели?
Указатель — это переменная, значением которой является адрес другой переменной. Как и любая переменная или константа, вы должны объявить указатель, прежде чем вы сможете работать с ним. Общая форма объявления переменной указателя —
type *var-name;
Здесь тип — это базовый тип указателя; это должен быть допустимый тип C ++, а var-name — это имя переменной-указателя. Звездочка, которую вы использовали для объявления указателя, та же, что и для умножения. Однако в этом утверждении звездочка используется для обозначения переменной в качестве указателя. Следующее является действительным объявлением указателя —
int *ip; // pointer to an integer double *dp; // pointer to a double float *fp; // pointer to a float char *ch // pointer to character
Фактический тип данных значения всех указателей, будь то целое число, число с плавающей запятой, символ или другое, является одним и тем же, длинное шестнадцатеричное число, представляющее адрес памяти. Единственное различие между указателями разных типов данных — это тип данных переменной или константы, на которую указывает указатель.
Использование указателей в C ++
Есть несколько важных операций, которые мы будем делать с указателями очень часто. (а) Мы определяем переменную указателя. (б) Присвоить адрес переменной указателю. (c) Наконец, получите доступ к значению по адресу, доступному в переменной указателя. Это делается с помощью унарного оператора *, который возвращает значение переменной, расположенной по адресу, указанному ее операндом. Следующий пример использует эти операции —
#include <iostream> using namespace std; int main () { int var = 20; // actual variable declaration. int *ip; // pointer variable ip = &var; // store address of var in pointer variable cout << "Value of var variable: "; cout << var << endl; // print the address stored in ip pointer variable cout << "Address stored in ip variable: "; cout << ip << endl; // access the value at the address available in pointer cout << "Value of *ip variable: "; cout << *ip << endl; return 0; }
Когда приведенный выше код компилируется и выполняется, он выдает результат, который выглядит следующим образом:
Value of var variable: 20 Address stored in ip variable: 0xbfc601ac Value of *ip variable: 20
Указатели в C ++
У указателей есть много, но простых понятий, и они очень важны для программирования на C ++. Существует несколько важных концепций указателей, которые должны быть понятны программисту C ++:
C ++ поддерживает нулевой указатель, который является константой со значением ноль, определенным в нескольких стандартных библиотеках.
Существует четыре арифметических оператора, которые можно использовать в указателях: ++, -, +, —
Существует тесная связь между указателями и массивами.
Вы можете определить массивы для хранения нескольких указателей.
C ++ позволяет вам иметь указатель на указатель и так далее.
Передача аргумента по ссылке или по адресу позволяет включить переданный аргумент в вызывающей функции вызываемой функцией.
C ++ позволяет функции возвращать указатель на локальную переменную, статическую переменную и динамически выделенную память.