Как да определя размера на масива в езика 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);
Струва си да се отбележи, че sizeof
не помага при работа със стойност на масив, която се е разпаднала до указател: въпреки че посочва началото на масив, за компилатора тя е същата като указател на единичен елемент от този масив. Указателят не "помни" нищо друго за масива, който е бил използван за инициализирането му.
int a[10];
int* p = a;
assert(sizeof(a) / sizeof(a[0]) == 10);
assert(sizeof(p) == sizeof(int*));
assert(sizeof(*p) == sizeof(int));
sizeof(array) / sizeof(array[0])