Другое

Динамический массив С: определение, как создавать, структуры и удаление

Lorem ipsum dolor

Динамический массив в С это массив, у которого количественное значение ячеек задается переменной, а значит, его размер может изменяться. Такие массивы нужны для того, чтобы более эффективно эксплуатировать оперативную память компьютера в С-программах. Напомним, что в статическом массиве количество ячеек задается числовой константой, а не переменной.

Как это работает? Например, вы написали программку, где получаете какие-то данные от пользователя. Вы объявили массив и задали ему фиксированный размер от 0 до 60 ячеек. Но такая программка не будет функциональной, потому что:

  • если пользователь заполнит только 10 элементов массива, тогда будет нерациональное использование памяти, потому что памяти будет выделяться под 60 элементов;

  • если пользователь решит занять 100 элементов массива, тогда у него ничего не получится, так как у нас выделено места только под 60.

Получается, что динамический массив в Си актуален в том случае, когда заранее неизвестно, сколько понадобится ячеек.

Динамический массив в С

В языке программирования С есть две связанные операции, которые применяются при выделении компьютерной памяти для программ:

  • «new» — отвечает за выделение памяти из области свободной памяти;

  • «delete» — отвечает за высвобождение выделенной памяти.

Выделяемая память обязательно должна высвобождаться. Поэтому эти операции применяются в паре. Если не делать этого явно, то память все равно освободится при завершении работы программы. Но бывают случаи, когда неиспользование операции «delete» для высвобождения памяти приводит к аварийному завершению работы программы за счет того, что в программе образуется утечка памяти. Поэтому про «delete» лучше не забывать.

При помощи оператора «new» можно выделить память под разные типы данных, например:

  • int,

  • float,

  • double,

  • char,

  • и др.

При выделении памяти для динамического массива также принято пользоваться этими операторами. Как происходит создание динамического массива при помощи этих операторов смотрите чуть ниже.

Динамический массив Си: создание

Создание динамического массива в С происходит по следующему шаблону:

<тип данных> *<имя массива> = new <тип переменной> [<количество элементов>], где

  • тип данных может быть разным, однако лучше, чтобы тип данных массива и тип переменной имели одинаковое значение;

  • тип переменной указывает, какой тип информации будет располагаться в элементах массива;

  • количество элементов здесь задается объем будущего массива: если указать «n», тогда количество элементов будет динамическим, а если указать фиксированное число, тогда количество элементов будет соответствовать числу.

Удаляется динамический массив строчкой:

delete [] <имя массива>

 

Если задать точное количество элементов, тогда динамический массив будет похож на статический, однако будет отличаться:

  • способом инициализации;

  • возможностью вовремя высвободить память.

Динамические массивы могут быть:

  • одномерными;

  • двумерными.

Как создать одномерный динамический массив в С

Как выглядит создание одномерного динамического массива в С в коде? Создаем небольшую программку:

int main() {

  setlocale(0, "");

  int n;

  cout << "Определите количество чисел, которое вы будете вводить: ";

  cin >> n;

  cout << "Нужно ввести " << n << " чисел: "; 

  int *dynamic_array = new int [n];    // происходит создание динамического массива

    for (int i = 0; i < n; i++) { 

    cin >> dynamic_array[i];  // считываются числа в элементах массива

  }

  cout << "Выводим числа массива в обратном порядке: ";

 

  for (int i = n - 1 ; i >= 0; i--) {

    cout << dynamic_array[i] << " ";  // выводятся значения каждой ячейки

  }

    cout << endl << "Теперь массив удаляется!";

  delete [] dynamic_array;  // происходит удаление динамического массива

  return 0;

}

 

Результат выполнения программы будет следующий:

Определите количество чисел, которое вы будете вводить: 6

Нужно ввести 6 чисел: 3 5 7 9 17 21

Выводим числа массива в обратном порядке: 21 17 9 7 5 3

Теперь массив удаляется!

Как создать двумерный динамический массив в Си

Двумерный динамический массив в С создается по похожему шаблону, что и одномерный:

<тип данных> **<имя массива> = new <тип переменной>* [<количество элементов>]

Однако нужно отметить, что появился еще один оператор «*» перед именем массива и после типа переменной. Также к созданию такого рода массивов подключается цикличный оператор «for».

Как двумерный массив выглядит в коде:

#include <iostream>

 using namespace std;

 int main() {

     setlocale(0, "");

 int **dynamic_array2 = new int* [6];   // создается двумерный динамический массив

  for (int i = 0; i < 6; i++) {         

    dynamic_array2[i] = new int [i + 1]; 

  }

 

  for (int i = 0; i < 6; i++) {

    cout << "Необходимо ввести числовые значения" << "(" << i + 1 << ")" << ":";

    for (int x = 0; x < i + 1; x++) { 

      cin >> dynamic_array2[i][x];

    }

  }

 

  for (int i = 0; i < 6; i++) {

    int total = 0;

    for (int x = 0; x < i + 1; x++) {

      total += dinamic_array2[i][x];

    }

    cout << "Суммарное значение " << i + 1 << " массивов будет равняться " << total << endl;

  }

 

  for (int i = 0; i < 6; i++) {

    delete [] dynamic_array2[i];  // удаляется массив

  }

 

  system("Пауза");

  return 0;

}

 

Этот код создает двумерный массив, потом заполняет его значениями, потом подсчитывает и выводит сумму значений всех массивов. В конце массив удаляется.

Заключение

Динамический массив в С реализуется довольно часто в тех случаях, когда заранее трудно предугадать количество элементов массива или количество памяти для его обработки. Реализация динамического массива не так сложна, и от создания статического массива его отделяет пара собственных «штрихов». Однако функционально динамический массив в Си способен выручить во многих нестандартных ситуациях.

Схожие статьи

Как сделать «проброс портов» на Cisco ASA, для чего используется эта функция
Другое

Как сделать «проброс портов» на Cisco ASA, для чего используется эта функция

Как использовать макросы в Excel, зачем они нужны, их возможности
Другое

Как использовать макросы в Excel, зачем они нужны, их возможности

Что такое планирование ресурсов предприятия (ERP)?
Другое

Что такое планирование ресурсов предприятия (ERP)?

Как ворваться в IT индустрию, если ничего не знаешь о ней
Другое

Как ворваться в IT индустрию, если ничего не знаешь о ней