Ako určiť dĺžku poľa v jazyku C
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;
}cVýstup je:
Total size of the array: 20 bytes
Size of a single element: 4 bytes
Number of elements in the array: 5cAritmetika 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 polearr, zvýši o 1. Keďžearrje pole, znamená to, že ukazovateľ bude ukazovať na ďalšie po sebe idúce pole, ktoré je rovnakého typu akoarr.
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;
}cVýstup:
Number of elements in the array: 5cPre 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;
}cVýstup:
Number of elements in the array: 8c