C-keeles saab mas­sii­vide pikkust usal­dus­väär­selt määrata mit­me­su­guste meetodite abil. See liht­sus­tab mas­sii­vide dü­naa­mi­list haldamist ja suuruse muu­tus­tega ko­ha­ne­mist.

Mis on massiivi pikkus C-keeles ja millised meetodid on selle mõõt­miseks olemas?

Kui mõõdate massiivi pikkust C-keeles, mõõdate massiivi si­sal­da­vate ele­men­tide arvu. See teave on oluline massiivi üksikute ele­men­tide juur­de­pääs­uks, massiivi lä­bi­miseks või ma­ni­pu­lee­ri­miseks. Kui dek­la­ree­rite massiivi C-keeles, eral­da­takse massiivi ele­men­tide jaoks mälu RAM-is jär­jes­tikku (st jär­jes­tikku ilma vahedeta). C-keeles pole massiivi pikkuse mää­ra­miseks sis­se­ehi­ta­tud funkt­siooni, seega peate selle käsitsi määrama.

Kõige levinumad meetodid on:

  • sizeof()
  • Vii­tea­rit­mee­tika
  • Tsüklid

sizeof()

sizeof() C-keeles operaator. See määrab kom­pi­lee­ri­mise ajal and­me­tüübi või muutuja suuruse baitides. Ope­raa­tori sizeof ta­gas­ta­tav tüüp on size_t, mis on märgita täisarv, mis esindab suurust baitides. C-keeles saab massiivi pikkuse ar­vu­ta­miseks kasutada ka funkt­siooni sizeof().

Süntaks

Massiivi ele­men­tide arvu mää­ra­miseks tuleb massiivi kogumaht jagada ühe elemendi mahuga.

data_type arrayLength = sizeof(array_name) / sizeof(array_name[index]);
c
  • data_type: See on andmetüüp, kus sal­ves­ta­takse massiivi pikkus.
  • array_name: Määrab massiivi nime.
  • sizeof(array_name): See väljend tagastab massiivi kogumahu baitides.
  • sizeof(array_name[index]): Jagades massiivi kogumahu ühe elemendi suurusega, saad massiivi ele­men­tide arvu.
  • index: See tähistab elemendi indeksit massiivis.

Näide

Selles näites kasutame sizeof(), et määrata massiivi myArray suurus ja ühe elemendi suurus. Selle teabe abil saame arvutada massiivi ele­men­tide arvu, jagades ko­gu­mas­siivi suurus ühe elemendi suurusega. Mõõdame elemendi ja massiivi suurust baitides.

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äljund on:

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

Vii­tea­rit­mee­tika

Viited ise ei sisalda teavet massiivi suuruse või pikkuse kohta. Siiski saame C-massiivi pikkuse kindlaks määrata, kasutades vii­tea­rit­mee­ti­kat koos massiivi ele­men­tide aad­res­si­dega.

Süntaks

data_type arr_length = *(&arr + 1) - arr;
c
  • &arr: See loob viite, mis osutab kogu ele­men­tide mas­sii­vile.
  • (&arr + 1): Siin suu­ren­da­takse massiivi arr osutavat viitajat 1 võrra. Kuna arr on massiiv, tähendab see, et viitaja osutab järg­misele jär­jes­ti­ku­sele mas­sii­vile, mis on sama tüüpi kui arr.

Näide

Väljend *(&arr + 1) - arr arvutab järgmise massiivi &arr + 1 osutava viite ja algse massiivi esimese elemendi osutava viite vahe. Sel juhul on „järgmine” mäluala esimese massiivi lõpp. Saadud vahe on võrdne massiivi ele­men­tide arvuga.

#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äljund:

Number of elements in the array: 5
c

For-tsüklid

Teine meetod massiivi pikkuse mää­ra­miseks C-keeles on for-tsükli ka­su­ta­mine. See meetod hõlmab massiivi lä­bi­käi­mist ja selles si­sal­du­vate ele­men­tide arvu loen­da­mist. Selle meetodi ka­su­ta­miseks peab massiiv, mille pikkust soovite määrata, asuma samas koo­di­vald­kon­nas kui for-tsükkel, mida kasutate selle pikkuse mää­ra­miseks.

Näide

Siin suurendab tsükkel arrayLength loendurit iga läbitud elemendi puhul. i < sizeof(arr) / sizeof(arr[0]) tingimus tagab, et tsükkel töötab ainult siis, kui elemendid on massiivis.

#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äljund:

Number of elements in the array: 8
c
Go to Main Menu