Kā noteikt masīva lielumu C valodā?

Kā noteikt masīva lielumu C valodā?

Tas ir, cik elementu var saturēt masīvs?

Risinājums

Izpildes kopsavilkums:

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

Pilna atbilde:

Lai noteiktu masīva lielumu baitos, varat izmantot sizeof operatoru:

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

Manā datorā inti ir 4 baiti, tātad n ir 68.

Lai noteiktu elementu skaitu masīvā, mēs varam dalīt kopējo masīva lielumu ar masīva elementa lielumu. To var izdarīt ar tipu, piemēram, šādi:

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

un iegūtu pareizo atbildi (68 / 4 = 17), bet, ja tips ir a mainītos, tad rastos nepatīkama kļūda, ja jūs aizmirstu mainīt arī sizeof(int).

Tāpēc vēlamais dalītājs ir sizeof(a[0]), un tā lielums ir sizeof(a[0]). masīva nullā elementa lielums.

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

Vēl viena priekšrocība ir tā, ka tagad jūs varat viegli parametrizēt masīva nosaukumu makro un iegūt:

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

int a[17];
size_t n = NELEMS(a);
Komentāri (20)

Ir vērts atzīmēt, ka sizeof nepalīdz, ja runa ir par masīva vērtību, kas ir sadalījusies līdz rādītājam: lai gan tas norāda uz masīva sākumu, kompilatoram tas ir tas pats, kas rādītājs uz vienu šī masīva elementu. Rādītājs neatceras "neko citu par masīvu, kas tika izmantots tā inicializēšanai.

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

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