Как да определя размера на масива в езика C?

Как да определя размера на масива в езика C?

Тоест броят на елементите, които масивът може да побере?

Решение

Изпълнително резюме:

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

Пълният отговор:

За да определите размера на масива си в байтове, можете да използвате sizeof оператора:

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

На моя компютър интовете са с дължина 4 байта, така че n е 68.

За да определим броя на елементите в масива, можем да разделим общия размер на масива на размера на елемента на масива. Можете да направите това с типа, както следва:

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

и да получите правилния отговор (68 / 4 = 17), но ако типът на a се промени, ще се получи неприятна грешка, ако забравите да промените и размера на sizeof(int).

Така че предпочитаният делител е sizeof(a[0]), размерът на нулевия елемент на масива.

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

Друго предимство е, че сега можете лесно да параметризирате името на масива в макрос и да получите:

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

int a[17];
size_t n = NELEMS(a);
Коментари (20)

Струва си да се отбележи, че sizeof не помага при работа със стойност на масив, която се е разпаднала до указател: въпреки че посочва началото на масив, за компилатора тя е същата като указател на единичен елемент от този масив. Указателят не "помни" нищо друго за масива, който е бил използван за инициализирането му.

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

assert(sizeof(a) / sizeof(a[0]) == 10);
assert(sizeof(p) == sizeof(int*));
assert(sizeof(*p) == sizeof(int));
Коментари (4)
sizeof(array) / sizeof(array[0])
Коментари (0)