Динамические массивы и переменные в C++: легко и просто!
Всем привет! В этой статье мы создадим массив и переменные применяя указатели. Если вы еще не почитали прошлую (начальную) статью про указатели, то советуем сначала изучить ее. Ну а если вы это все знаете, то погнали!
Что такое динамические переменные
Динамические переменные - это переменные, которые созданы напрямую с помощью указателей. Для них существует функция удаление (это мы разберем ниже).
Чтобы мы могли полноценно создавать динамические переменные, нам понадобится изучить конструктор - new
, после его использования в оперативной памяти компьютера выделяются ячейки на тот тип данных, который мы указали.
На каждый тип данных выделяется разное количество ячеек.
Как создать динамические переменные в C++
Для создания динамических переменных нам понадобится применять конструкцию ниже:
<тип данных указателя> *<имя указателя> = new <тип данных>(<первоначальное значение>);
Давайте подробно ее разберем:
<тип данных указателя>
- указанный тип данных почти ни на что не повлияет. Читайте ниже.new
- это конструктор, который и будет заключительным звеном для создания нашей переменной.<тип данных>
- здесь нам понадобится указать тип, какой будет храниться в переменной. Он необязательно должен совпадать с типом указателя.<первоначальное значение>
- с помощью круглых скобок можно указать значение переменной еще при ее инициализации. Использование круглых скобок в этой конструкции необязательно.
Вы должны знать! Если тип переменной отличается от типа указателя - то эта динамическая переменная будет весить больше в оперативной памяти, чем такая же переменная с одинаковыми типами!
Пример использования динамических переменных
Внизу мы решили использовать динамические переменные:
#include <iostream>
using namespace std;
int main() {
setlocale(0, "");
int *a = new int;
int b = 10;
*a = b;
cout <<"Теперь переменная a равна "<< *a << endl;
cout <<"Пришло время удалить эту переменную!";
system("pause");
return 0;
}
- В строке 7: мы объявили переменную, оперируя конструктором
new
. - Дальше в строке 11: значение нашей переменной становится равно 10.
- И в самом конце, в строке 15: выводим значение нашей переменной на экран.
Важно помнить! Динамические переменные - это указатели, и поэтому перед ними обязательно должен стоять оператор *
.
Удаление динамических переменных
Как мы говорили выше, у нас есть возможность освобождать память переменной или, если понятным языком, удалять переменную из оперативной памяти ПК.
Конечно, эта переменная и так удалится из оперативной памяти компьютера при завершении программы. Но если нам захотелось удалить ее еще в середине программы, то это будет возможно благодаря оператору delete
.
Чтобы его использовать, нужно применить конструкцию ниже:
delete <имя переменной>;
- В самом начале мы используем оператор
delete
. - Дальше идет имя переменной.
Вы должны обратить внимание на отсутствие оператора *
перед именем переменной. Многие начинающие прогеры забывают про это и в дальнейшем пытаются найти ошибку часами.
Статическое и динамическое объявление переменных
Статическое объявление переменных имеет такой вид:
int number;
Использование динамических переменных имеет маленький плюс. Он заключается в освобождении памяти переменной до завершения программы. Благодаря этому мы можем сначала удалить переменную, а потом ее снова создать в другом участке программы (когда это нам будет нужно).
Что такое динамические массивы
Мы уже знакомы с миром массивов в C++. Мы не раз создавали их на определенное количество ячеек и при этом использовали статическое создание массивов.
int array[100];
Но еще ни разу не затрагивали их использование с указателями!
Мы создавали массивы на сто тысяч элементов, а то и больше. И не один раз бывало, что большое количество ячеек оставались неиспользованными. Это является неправильным применением оперативной памяти в ПК.
Чтобы мы бесполезно не использовали оперативную память в компьютере, нам понадобится оперировать с указателями в свете массивов.
Нам нужно вспомнить, что для создания статического массива количество ячеек нужно задавать числовой константой (а не переменной). Это очень неприятно, потому что в программе мы не знаем, сколько нам может понадобится ячеек.
Например, пользователь захотел вписать 1000 чисел в массив, а мы из-за незнания этого факта сделали массив всего лишь на 500 ячеек.
Динамический массив - это массив, у которого количество ячеек можно задавать и переменной, и числовой константой. Это большой плюс перед использованием статического массива.