Dĺžku polí v jazyku C môžete spoľahlivo určiť pomocou rôznych metód. Vďaka tomu je jednoduchšie dynamicky spravovať polia a prispôsobovať sa zmenám veľkosti.

Čo je dĺžka poľa v jazyku C a aké metódy existujú na jej meranie?

Pri meraní dĺžky poľa v jazyku C meriate počet prvkov, ktoré pole obsahuje. Táto informácia je kľúčová pre prístup k jednotlivým prvkom v poli, prechádzanie po ňom alebo vykonávanie manipulácií. Keď deklarujete pole v jazyku C, pamäť pre prvky v poli je alokovaná v pamäti RAM súvisle (t. j. sekvenčne bez medzier). V jazyku C neexistuje žiadna vstavaná funkcia na určenie dĺžky poľa, takže ju musíte určiť ručne.

Najbežnejšie metódy sú:

  • sizeof()
  • Aritmetika ukazovateľov
  • Slučky

sizeof()

sizeof() operátor v jazyku C. Určuje veľkosť dátového typu alebo premennej v bajtoch počas kompilácie. Vrátený typ operátora sizeof je size_t, typ bez znamienka, ktorý reprezentuje veľkosť v bajtoch. V jazyku C môžete na výpočet dĺžky poľa použiť aj funkciu sizeof().

Syntax

Na určenie počtu prvkov v poli musíte celkovú veľkosť poľa vydeliť veľkosťou jedného prvku.

data_type arrayLength = sizeof(array_name) / sizeof(array_name[index]);
c
  • data_type: Ide o typ údajov, v ktorom bude uložená dĺžka poľa.
  • array_name: Určuje názov poľa.
  • sizeof(array_name): Tento výraz vráti celkovú veľkosť poľa v bajtoch.
  • sizeof(array_name[index]): Vydelením celkovej veľkosti poľa veľkosťou jedného prvku získate počet prvkov v poli.
  • index: Predstavuje index prvku v poli.

Príklad

V tomto príklade použijeme sizeof() na určenie veľkosti poľa myArray, ako aj veľkosti jedného prvku. S touto informáciou môžeme potom vypočítať počet prvkov v poli vydelením celkovej veľkosti veľkosťou jedného prvku. Veľkosť prvku a poľa budeme merať v bajtoch.

int main() {
    int myArray[] = {1, 2, 3, 4, 5};
    size_t totalSize = sizeof(myArray);
    size_t elementSize = sizeof(myArray[0]);
    size_t arrayLength = totalSize / elementSize;
    printf("Total size of the array: %d bytes\n", (int)totalSize);
    printf("Size of a single element: %d bytes\n", (int)elementSize);
    printf("Number of elements in the array: %d\n", (int)arrayLength);
    return 0;
}
c

Výstup je:

Total size of the array: 20 bytes
Size of a single element: 4 bytes
Number of elements in the array: 5
c

Aritmetika ukazovateľov

Samotné ukazovatele neobsahujú informácie o veľkosti alebo dĺžke poľa. Môžeme však použiť aritmetiku ukazovateľov spolu s adresami prvkov poľa na určenie dĺžky poľa C.

Syntax

data_type arr_length = *(&arr + 1) - arr;
c
  • &arr: Vytvorí sa ukazovateľ, ktorý ukazuje na celé pole prvkov.
  • (&arr + 1): Tu sa ukazovateľ, ktorý ukazuje na pole arr, zvýši o 1. Keďže arr je pole, znamená to, že ukazovateľ bude ukazovať na ďalšie po sebe idúce pole, ktoré je rovnakého typu ako arr.

Príklad

Výraz *(&arr + 1) - arr vypočíta rozdiel medzi ukazovateľom, ktorý ukazuje na ďalšie pole &arr + 1, a ukazovateľom, ktorý ukazuje na prvý prvok pôvodného poľa. V tomto prípade je „ďalšia“ oblasť pamäte koniec prvého poľa. Výsledný rozdiel sa rovná počtu prvkov v poli.

#include <stdio.h>
int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int length = *(&arr + 1) - arr;
    printf("Number of elements in the array: %d\n", length);
    return 0;
}
c

Výstup:

Number of elements in the array: 5
c

Pre slučky

Ďalšou metódou na určenie dĺžky poľa v jazyku C je použitie cyklu for. Tento prístup zahŕňa iteráciu cez pole a spočítanie počtu prvkov, ktoré obsahuje. Ak chcete použiť túto techniku, pole, ktorého dĺžku chcete určiť, musí byť v rovnakom rozsahu kódu ako cyklus for, ktorý používate na určenie jeho dĺžky.

Príklad

Tu slučka zvyšuje počítadlo arrayLength pre každý prvok, ktorý prejde. Podmienka i < sizeof(arr) / sizeof(arr[0]) zabezpečuje, že slučka beží len vtedy, ak sú prvky v poli.

#include <stdio.h>
int main() {
    int arr[] = {1, 2, 3, 4, 5, 6, 7, 8};
    size_t arrayLength = 0;
    for (size_t i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i) {
        arrayLength++;
    }
    printf("Number of elements in the array: %d\n", arrayLength);
    return 0;
}
c

Výstup:

Number of elements in the array: 8
c
Prejsť na hlavné menu