Kaip C kalba nustatyti masyvo dydį?

Kaip C kalba nustatyti masyvo dydį?

T. y. kiek elementų gali talpinti masyvas?

Sprendimas

Vykdomoji santrauka:

int a[17];
size_t n = sizeof(a)/sizeof(a[0]);

Pilnas atsakymas:

Norėdami nustatyti masyvo dydį baitais, galite naudoti sizeof operatorių:

int a[17];
size_t n = sizeof(a);

Mano kompiuteryje intų ilgis yra 4 baitai, taigi n yra 68.

Norėdami nustatyti masyvo elementų skaičių, galime padalyti bendrą masyvo dydį iš masyvo elemento dydžio. Tai galite padaryti su tipu, pvz:

int a[17];
size_t n = sizeof(a) / sizeof(int);

ir gautumėte tinkamą atsakymą (68 / 4 = 17), bet jei tipas a pasikeistų, turėtumėte nemalonią klaidą, jei pamirštumėte pakeisti ir sizeof(int).

Taigi pageidaujamas daliklis yra sizeof(a[0]), t. y. nulinis masyvo elementas.

int a[17];
size_t n = sizeof(a) / sizeof(a[0]);

Dar vienas privalumas yra tas, kad dabar galite lengvai parametrizuoti masyvo pavadinimą makrokomandoje ir gauti:

#define NELEMS(x)  (sizeof(x) / sizeof((x)[0]))

int a[17];
size_t n = NELEMS(a);
Komentarai (20)

Verta paminėti, kad sizeof nepadeda, kai susiduriama su masyvo verte, kuri sumažėjo iki rodyklės: nors ji rodo į masyvo pradžią, kompiliatoriui tai yra tas pats, kas rodyklė į vieną to masyvo elementą. Rodyklė neprisimena "nieko daugiau apie masyvą, kuris buvo naudojamas jai inicializuoti.

int a[10];
int* p = a;

assert(sizeof(a) / sizeof(a[0]) == 10);
assert(sizeof(p) == sizeof(int*));
assert(sizeof(*p) == sizeof(int));
Komentarai (4)
sizeof(array) / sizeof(array[0])
Komentarai (0)