Как определить размер массива?
3 ноября 2014 г. Просмотров: 912
Одной из наиболее часто применяемых форм хранения данных в процессе работы программ, являются массивы. Они позволяют организовать однотипные элементы в виде упорядоченной последовательности и получать к ним быстрый доступ по индексу. Очень часто при разработке приложений на мощных и гибких языках программирования, дающих возможность прямого доступа к памяти, таких как 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.
Оцените статью!
Вам понадобится
- Компилятор C++.