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

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

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