C++ Указатель
Изучение указателей C++ — это одновременно просто и увлекательно. С помощью указателей некоторые задачи программирования на C++ можно упростить, а некоторые задачи, такие как динамическое выделение памяти, невозможно выполнить без указателей. Поэтому, чтобы стать хорошим программистом C++, необходимо изучить указатели.
Как вы знаете, каждая переменная имеет ячейку памяти, и каждая ячейка памяти определяет адрес, доступ к которому можно получить с помощью оператора амперсанда (&), который представляет адрес в памяти. См. следующий пример, который выведет адреса определённых переменных:
Пример
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
var1 变量的地址: 0xbfebd5c0 var2 变量的地址: 0xbfebd5b6
На приведённом выше примере мы узнали, что такое адрес памяти и как получить к нему доступ. Теперь давайте посмотрим, что такое указатель.
Что такое указатель?
Указатель— это переменная, значением которой является адрес другой переменной, то есть прямой адрес ячейки памяти. Как и другие переменные или константы, перед использованием указателя необходимо его объявить, чтобы хранить адрес другой переменной. Общий вид объявления переменной-указателя:
type *var-name;
Здесь,typeЭто базовый тип указателя, и он должен быть допустимым типом данных C++.var-name. Первый представляет собой массив, элементы которого являются указателями на int. Второй представляет собой указатель на массив int. При столкновении с такими проблемами читайте изнутри наружу.
int *ip; /* 一个整型的指针 */ double *dp; /* 一个 double 型的指针 */ float *fp; /* 一个浮点型的指针 */ char *ch; /* 一个字符型的指针 */
Фактический тип данных значения всех указателей, будь то целочисленный, с плавающей запятой, символьный или другой тип данных, одинаков: длинное шестнадцатеричное число, представляющее адрес памяти. Единственное различие между указателями разных типов данных — это тип данных переменной или константы, на которую указывает указатель.
Использование указателей в C++
При работе с указателями часто выполняются следующие операции: определение переменной-указателя, присваивание указателю адреса переменной и доступ к значению по адресу, хранящемуся в переменной-указателе. Это выполняется с помощью унарного оператора*чтобы вернуть значение переменной, расположенной по адресу, указанному операндом. В следующем примере используются эти операции:
Пример
Когда приведенный выше код скомпилирован и выполнен, он выдает следующие результаты:
Value of var variable: 20 Address stored in ip variable: 0xbfc601ac Value of *ip variable: 20
Подробнее об указателях в C++
В C++ существует множество понятий, связанных с указателями. Эти понятия просты, но все они очень важны. Ниже перечислены некоторые важные понятия, связанные с указателями, которые программисты C++ должны чётко понимать:
| Концепции | Описание |
|---|---|
| Нулевой указатель C++ | C++ поддерживает нулевые указатели. NULL-указатель — это константа, определённая в стандартной библиотеке, со значением ноль. |
| C++ Арифметика указателей | Над указателями можно выполнять четыре арифметические операции: ++, --, +, - |
| Указатели C++ против массивов | Существует тесная связь между указателями и массивами. |
| Массив указателей в C++ | Массивы можно определять для хранения указателей. |
| C++ Указатель на указатель | C++ допускает указатели на указатели. |
| Передача указателей в функции в C++ | Передача параметров по ссылке или по адресу приводит к тому, что переданные параметры изменяются в вызывающей функции. |
| C++ Возврат указателей из функций | C++ позволяет функциям возвращать указатели на локальные переменные, статические переменные и динамически выделенную память. |