07. C/C++ Массивы

C/C++ Массивы

До этого момента мы работали с одиночными переменными, но что делать, если необходимо работать с множеством однотипных переменных?
Для этого используются массивы:
Массив – это непрерывная!!! выделенная область в памяти, занятая несколькими переменными (обычно).

Принцип создания массива:
type NameVar[size];     //неинициализированный массив
или
type NameVar[size]={0x00,0x01….size-1}; //сразу задаем значения
или
type NameVar[size]={0}; //инициализируем массив нулями

также массив можно заполнить в цикле, например
for(int i=0;i< size;++i)

Например создадим массив:
long Arr[4];

На рисунке схематично показано расположение массива в памяти, видно, что выделяется область под массив.
Внутри этой области расположены элементы типа long с индексами от 0 до 3,
можно вспомнить, что long имеет размер 4 байта, их порядок (1,2,3,4 или 4,3,2,1) определяется типом ОС и иногда компилятором, поэтому желательно при прямой работе с памятью это учитывать.

Также можно создавать многомерные массивы:
int Arr2x[5][3]; // пример объявление двумерного массива:
В этом массиве будет 5 строк и 3 столбца

            Столбцы

Строки

0 1 2
0 Arr2x[0][0] Arr2x[0][1] Arr2x[0][2]
1 Arr2x[1][0] Arr2x[1][1] Arr2x[1][2]
2 Arr2x[2][0] Arr2x[2][1] Arr2x[2][2]
3 Arr2x[3][0] Arr2x[3][1] Arr2x[3][2]
4 Arr2x[4][0] Arr2x[4][1] Arr2x[4][2]

Зачем нужны массивы – так как все данные – это Байты и наборы Байтов, то для сложных типов данных нам
1- нужно объединять (группировать их) в большие по размеру области
2-для более удобной сортировки.

Действительно, т.к. элементы в памяти располагаются последовательно, обращаясь по индексу массива мы можем быстро в цикле перебрать переменные.
Например:
У нас меряется напряжение в сети 220В каждую минуту и записывается в массив, время старта измерения известно.
Предположим что произошел сбой (напряжение пропало) и надо определить время этого сбоя, мы можем в цикле найти и этот сбой и определить время:

Пусть массив измеренных значений выглядит так
int Arr_Voltage[10]{220,230,210,230,150 0,0,220,230,210};

Тогда:

int j=0;
for(int i=0;i<10;++i)
{
  if(Arr_Voltage[i]==0)
  {
    j=i;
    break;
  }
}

Теперь в переменной j хранится номер отсчета напряжения, когда произошел сбой, прибавив его к времени старта измерений получим время сбоя.

В языках 4.C и C++ есть интересная функция для работы с массивами – sizeof(Arr), она позволяет определить размер массива в Байтах, т.е. если ее применить для массива long Arr[4];

int ArrSize=sizeof(Arr);
То в ArrSize будет значение 16,но если переделать функцию

int ArrSize=sizeof(Arr)/sizeof(Arr[0]);
то мы получим 16/4=4 элемента.

Подобную функцию удобно использовать для массивов, которые могут изменяться, или чтобы не хранить глобальные переменные с размером массива.

Leave a Reply

Your email address will not be published. Required fields are marked *