Указатели в C++

12-10-21 C/C++ 1

В этом уроке мы узнаем что такое указатели и как их использовать.

Указатели — очень мощный и полезный инструмент в программировании. Они помогают улучшить эффективность программы и управлять неограниченным количеством данных. Например, указатели можно использовать для динамического выделения памяти, что позволяет нам управлять любым количеством данных, нам необязательно заранее знать сколько памяти нам необходимо.

Что такое указатели?

Указатели названы так, потому что они указывают на определенные участки памяти. Значениями указателей служат адреса участков памяти, выделенных для объектов конкретных типов. Выделяют два вида указателей: указатели на объекты и указатели на функции. Указатели на функции не допускают применения к ним арифметических операций, а указатели объектов разрешено использовать в некоторых арифметических выражениях.

В простейшем случае определение и описание указателя-переменной на некоторый объект имеют вид:

type *имя_указателя;

Где type — обозначение типа, а * — унарная операция раскрытия ссылки (операция разыменования; операция доступа по адресу), операндом которой должен быть указатель (имя_указателя).

При объявлении нескольких указателей на объекты одного и того же типа символ «*» помещают перед каждым именем, например, определение:

int *i1, *i2, i;

вводит два указателя на объекты целого типа и одну переменную i целого типа.

При объявлении указателя целесообразно выполнить его инициализацию, возможны следующие варианты инициализации:

char cc = 'd';
char *pc = &cc; //инициализированный указатель на объект типа char
char *ptr(NULL); //нулевой указатель на объект типа char
char *p; // неинициализированный указатель на объект типа char

Рассмотрим простую программу:

#include <iostream>

using namespace std;

int main()
{ 
  int x;            // объект типа int
  int *p;           // указатель

  p = &x;           // присваиваем p адрем переменной x
  cin>> x;          // инициализируем x
  cin.ignore();
  cout<< *p <<"\n"; // берем значение указателя p, с помощью "*"
  cin.get();
}

Программа выведет значение переменной x. Разберемся, почему так произошло. В x хранится переменная типа int, p — указатель. С помощью оператора &, который позволяет получить адрес по которому переменная хранится в памяти, мы присвоили p адрес переменной x, таким образом p теперь указывает на область памяти, где хранится x, а значит если изменится x, изменится и значение указателя p, которое можно получить с помощью операции разыменования «*».

Для инициализации указателя также можно использовать ключевое слово new.

int *ptr = new int;

Так мы выделим для нашего указателя необходимое количество памяти. Что бы освободить память указателя используется ключевое слово delete:

delete ptr;

Так же после удаления указателя, будет полезно сделать его null-pointer, т.е. указывающим на NULL, так будет легче отследить исключительные ситуации.

Хочешь получать статьи на почту?

Подпишись на обновления!
* Ваш email не будет разглашен/продан. Вы сможете отписаться в любое время.

1 Комментарий

  1. BuIlDaLiBlE:

    Наверное тупейший вопрос, но зачем нужен указатель на область памяти?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *