# Kaip nustatyti masyvo ilgį C kalboje

C kalboje galima patikimai nustatyti masyvų ilgį naudojant įvairius metodus. Tai palengvina dinamišką masyvų valdymą ir prisitaikymą prie dydžio pokyčių.

## Kas yra masyvo ilgis C kalboje ir kokie yra jo matavimo metodai?

Matydami masyvo ilgį C kalboje, jūs matuojate **elementų, kuriuos** masyvas turi **, skaičių**. Ši informacija yra labai svarbi norint pasiekti atskirus masyvo elementus, juos peržiūrėti ar atlikti manipuliacijas. Kai deklaruojate masyvą C kalboje, atminties elementams masyve yra skiriama RAM atmintyje (t. y. nuosekliai, be tarpų). C kalboje nėra įdiegtos funkcijos masyvo ilgį nustatyti, todėl jį reikia nustatyti rankiniu būdu.

Dažniausiai naudojami metodai yra:

- **`sizeof()`**
- **Rodyklės aritmetika**
- **Ciklai**

## `sizeof()`

`sizeof()` operatorius C kalboje. Jis nustato **duomenų tipo arba kintamojo dydį baitais** kompiliavimo metu. Operatoriaus `sizeof` grąžinamojo tipo reikšmė yra `size_t`, tai yra nelyginis sveikasis skaičius, kuris atitinka dydį baitais. C kalboje taip pat galima naudoti funkciją `sizeof()`, kad apskaičiuoti masyvo ilgį.

### Sintaksė

Norėdami nustatyti masyvo elementų skaičių, turite padalyti bendrą masyvo dydį iš vieno elemento dydžio.

```c
data_type arrayLength = sizeof(array_name) / sizeof(array_name[index]);
```

- **data\_type**: Tai duomenų tipas, kuriame bus saugomas masyvo ilgis.
- **array\_name**: Nurodo masyvo pavadinimą.
- **sizeof(array\_name)**: Šis išraiškos teiginys grąžina masyvo bendrą dydį baitais.
- **sizeof(array\_name\[index\])**: Padalijus masyvo bendrą dydį iš vieno elemento dydžio, gaunamas elementų skaičius masyve.
- **index**: Tai reiškia masyvo elemento indeksą.

### Pavyzdys

Šiame pavyzdyje naudosime `sizeof()`, kad nustatytume masyvo `myArray` dydį ir vieno elemento dydį. Turėdami šią informaciją, galime apskaičiuoti elementų skaičių masyve, **padalindami bendrą dydį iš vieno elemento dydžio**. Elemento ir masyvo dydį matuosime baitais.

```c
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;
}
```

Rezultatas yra:

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

## Rodyklės aritmetika

Pačios rodyklės neapima informacijos apie masyvo dydį ar ilgį. Tačiau galime naudoti rodyklių aritmetiką kartu su **masyvo elementų adresais**, kad nustatytume C masyvo ilgį.

### Sintaksė

```c
data_type arr_length = *(&arr + 1) - arr;
```

- **`&arr`**: Tai sukuria rodyklę, kuri nurodo visą elementų masyvą.
- **`(&arr + 1)`**: Čia rodyklė, nukreipta į masyvą `arr`, padidinama 1. Kadangi `arr` yra masyvas, tai reiškia, kad rodyklė nukreips į kitą iš eilės einantį masyvą, kuris yra to paties tipo kaip `arr`.

### Pavyzdys

Išraiška `*(&arr + 1) - arr` apskaičiuoja skirtumą tarp rodyklės, kuri nurodo į kitą masyvą `&arr + 1`, ir rodyklės, kuri nurodo į pirmojo masyvo elementą. Šiuo atveju „kitas“ atminties plotas yra pirmojo masyvo pabaiga. Gautas skirtumas yra lygus masyvo elementų skaičiui.

```c
#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;
}
```

Išvestis:

```c
Number of elements in the array: 5
```

## For ciklai

Kitas būdas nustatyti masyvo ilgį C kalboje yra naudoti **for ciklą**. Šis metodas apima masyvo perėjimą ir jame esančių elementų skaičiavimą. Norint naudoti šią techniką, masyvas, kurio ilgį norite nustatyti, turi būti toje pačioje kodo srityje kaip ir for ciklas, kurį naudojate jo ilgiui nustatyti.

### Pavyzdys

Čia kilpa padidina `arrayLength` skaitiklį už kiekvieną elementą, kuris yra perduodamas. `i < sizeof(arr) / sizeof(arr[0])` sąlyga užtikrina, kad kilpa veiks tik tuo atveju, jei elementai yra masyve.

```c
#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;
}
```

Išvestis:

```c
Number of elements in the array: 8
```


This is a markdown version of: [https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/c-masyvo-ilgis/](https://www.ionos.com/lt-lt/digitalguide/interneto-svetaines/interneto-svetainiu-kurimas/c-masyvo-ilgis/) for AI/LLM consumption.