Як визначити розмір масиву

Як визначити розмір масиву

Однією з найбільш часто застосовуваних форм зберігання даних у процесі роботи програм є масиви. Вони дозволяють організувати однотипні елементи у вигляді впорядкованої послідовності і отримувати до них швидкий доступ за індексом. Дуже часто при розробці програм потужними і гнучкими мовами програмування, що дають можливість прямого доступу до пам 'яті, таких як C++, потрібно визначити розмір масиву.

Вам знадобиться

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

Інструкція

1. Визначте розмір масиву на етапі компіляції шляхом його обчислення з використанням оператора sizeof. Цей оператор повертає об 'єм пам' яті (у байтах), що займається переданим йому аргументом. Як аргумент може виступати як змінна, так і ідентифікатор типу. Оператор sizeof повертає кінцевий об 'єм пам' яті, який займається об 'єктом на етапі виконання програми (з урахуванням, наприклад, налаштувань меж вирівнювання полів структур), однак його обчислення проводиться на етапі компіляції.


2. Щоб визначити розмір масиву за допомогою оператора sizeof, розділіть весь його обсяг на об 'єм одного елемента. Наприклад, якщо є наступне визначення масиву:int aTemp [] = {10, 20, 0xFFFF, -1, 16}, його обсяг може бути обчислений як:int nSize = sizeof(aTemp) / sizeof(aTemp[0]);

3. Для більш зручного застосування даного методу має сенс визначити макрос:# define countof (a) (sizeof (a )/sizeof (a [0])) Зверніть увагу на те, що, оскільки значення оператора sizeof обчислюється на етапі компіляції, в точці, де проводиться обчислення, інформація про обсяг масиву і його елементів повинна бути доступна явно. Іншими словами, визначення параметрів масиву невідомого розміру за його extern-декларацією неможливе.

4. Визначте розмір масиву під час виконання програми за допомогою відомої ознаки його закінчення. Одним з підходів, що дозволяють зберігати і передавати дані у вигляді масивів невизначеної довжини, є виділення спеціального значення під ознаку, що свідчить про завершення послідовності даних. Так, однобайтові рядки в стилі C, що є масивами символів, повинні закінчуватися значенням 0, упаковані масиви C-рядків змінної довжини завершують двома нулями, а масиви індексів - елементом NULL.

5. Для визначення розміру масиву, представленого подібним чином, здійсните його поелементне сканування до виявлення завершального елемента. У процесі сканування нарощуйте значення лічильника, ініціалізованого нулем. Або збільшуйте значення індексу на елемент масиву, а після сканування вирахуйте різницю індексів на поточний і перший елементи.

6. Отримайте розмір динамічного масиву, представленого об 'єктом якогось кадру або бібліотеки, за допомогою виклику його методу. Будь-які класи, які інкапсулюють функціонал подібних масивів, мають методи для отримання поточної кількості елементів. Так, шаблонний клас std::vector стандартної бібліотеки C++ має метод size, клас QVector фреймворку Qt - метод count, а аналогічний клас CArray фреймворку MFC - метод GetCount.