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

Однією з найбільш часто вживаних форм зберігання даних в процесі роботи програм, є масиви. Вони дозволяють організувати однотипні елементи у вигляді впорядкованої послідовності і отримувати до них швидкий доступ за індексом. Дуже часто при розробці додатків на потужних і гнучких мовах програмування, що дають можливість прямого доступу до пам'яті, таких як 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.