Kaip C kalba nustatyti masyvo dydį?
T. y. kiek elementų gali talpinti masyvas?
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);
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));