Jak określić rozmiar mojej tablicy w C?
To znaczy, liczbę elementów, które tablica może pomieścić?
Szczegółowe podsumowanie:
int a[17];
size_t n = sizeof(a)/sizeof(a[0]);
Pełna odpowiedź:
Aby określić rozmiar swojej tablicy w bajtach, możesz użyć operatora sizeof
.
operator:
int a[17];
size_t n = sizeof(a);
Na moim komputerze, ints mają długość 4 bajtów, więc n wynosi 68.
Aby określić liczbę elementów w tablicy, możemy podzielić całkowity rozmiar tablicy przez rozmiar elementu tablicy. Możesz to zrobić za pomocą typu, jak poniżej:
int a[17];
size_t n = sizeof(a) / sizeof(int);
i otrzymać poprawną odpowiedź (68 / 4 = 17), ale jeśli typ
a
się zmienił, miałbyś paskudny błąd, gdybyś zapomniał zmienić
sizeof(int)
również.
Tak więc preferowanym dzielnikiem jest sizeof(a[0])
, rozmiar zerowego elementu tablicy.
zeroeth element tablicy.
int a[17];
size_t n = sizeof(a) / sizeof(a[0]);
Kolejną zaletą jest to, że można teraz łatwo sparametryzować nazwę tablicy w makrze i uzyskać:
#define NELEMS(x) (sizeof(x) / sizeof((x)[0]))
int a[17];
size_t n = NELEMS(a);
Warto zauważyć, że sizeof
nie pomaga, gdy mamy do czynienia z wartością tablicy, która rozpadła się do wskaźnika: nawet jeśli wskazuje na początek tablicy, dla kompilatora jest to to samo, co wskaźnik do pojedynczego elementu tej tablicy. Wskaźnik nie "pamięta" niczego innego o tablicy, która została użyta do jego inicjalizacji.
int a[10];
int* p = a;
assert(sizeof(a) / sizeof(a[0]) == 10);
assert(sizeof(p) == sizeof(int*));
assert(sizeof(*p) == sizeof(int));