Как определить размер массива?

3 ноября 2014 г. Просмотров: 828
Одной из наиболее часто применяемых форм хранения данных в процессе работы программ, являются массивы. Они позволяют организовать однотипные элементы в виде упорядоченной последовательности и получать к ним быстрый доступ по индексу. Очень часто при разработке приложений на мощных и гибких языках программирования, дающих возможность прямого доступа к памяти, таких как C++, требуется определить размер массива.

Вам понадобится

  • Компилятор C++.

Инструкция

  • Определите размер массива на этапе компиляции путем его вычисления с использованием оператора sizeof. Данный оператор возвращает объем памяти (в байтах), занимаемый переданным ему аргументом. В качестве аргумента может выступать как переменная, так и идентификатор типа. Оператор sizeof возвращает конечный объем памяти, занимаемый объектом на этапе исполнения программы (с учетом, например, настроек границ выравнивания полей структур), однако его вычисление производится на этапе компиляции.
  • Для определения размера массива при помощи оператора sizeof, разделите весь его объем на объем одного элемента. Например, если имеется следующее определение массива:int aTemp[] = { 10, 20, 0xFFFF, -1, 16 };то его объем может быть вычислен как:int nSize = sizeof(aTemp) / sizeof(aTemp[0]);
  • Для более удобного применения данного метода имеет смысл определить макрос:#define countof(a) (sizeof(a) / sizeof(a[0]))Обратите внимание на то, что, поскольку значение оператора sizeof вычисляется на этапе компиляции, в точке, где производится вычисление, информация об объеме массива и его элементов должна быть доступна явно. Иными словами, определение параметров массива неизвестного размера по его extern-декларации невозможно.
  • Определите размер массива в процессе выполнения программы, используя известный признак его окончания. Одним из подходов, позволяющих хранить и передавать данные в виде массивов неопределенной длины, является выделение специального значения под признак, свидетельствующий о завершении последовательности данных. Так, однобайтовые строки в стиле C, являющиеся массивами символов, должны оканчиваться значением 0, упакованные массивы C-строк переменной длины завершают двумя нулями, а массивы указателей - элементом NULL.
  • Для определения размера массива, представленного подобным образом, осуществите его поэлементное сканирование до обнаружения завершающего элемента. В процессе сканирования наращивайте значение счетчика, инициализированного нулем. Либо увеличивайте значение указателя на элемент массива, а после сканирования вычислите разность указателей на текущий и первый элементы.
  • Получите размер динамического массива, представленного объектом какого-либо фреймворка или библиотеки, при помощи вызова его метода. Любые классы, инкапсулирующие функционал подобных массивов, имеют методы для получения текущего количества элементов. Так, шаблонный класс std::vector стандартной библиотеки C++ имеет метод size, класс QVector фреймворка Qt - метод count, а аналогичный класс CArray фреймворка MFC - метод GetCount.
  • Оцените статью!