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