kzen.dev
  • Pytania
  • Tagi
  • Użytkownicy
Powiadomienia
Nagrody
Rejestracja
Po zarejestrowaniu się, będziesz otrzymywać powiadomienia o odpowiedziach i komentarzach do swoich pytań.
Zaloguj się
Brak tłumaczeń pasujących do Twojego wyszukiwania Jeśli masz już konto, zaloguj się, aby sprawdzić nowe powiadomienia.
Za dodane pytania, odpowiedzi i komentarze przewidziane są nagrody.
Więcej
Źródło
Edytuj
Mark Harrison
Mark Harrison
Question

Jak określić rozmiar mojej tablicy w C?

Jak określić rozmiar mojej tablicy w C?

To znaczy, liczbę elementów, które tablica może pomieścić?

894 2008-09-01T06:49:22+00:00 3
Peter Mortensen
Peter Mortensen
Edytowane pytanie 28. lutego 2013 в 2:16
Programowanie
arrays
c
memory
To pytanie ma 1 odpowiedź w języku angielskim, aby je przeczytać zaloguj się na swoje konto.
Solution / Answer
Mark Harrison
Mark Harrison
1. września 2008 в 6:49
2008-09-01T06:49:44+00:00
Więcej
Źródło
Edytuj
#8434591

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);
einpoklum  - reinstate Monica
einpoklum - reinstate Monica
Edytowana odpowiedź 28. marca 2019 в 9:34
1133
0
Do you have a question? Add it on the site and get an answer instantly
en.kzen.dev
Magnus Hoff
Magnus Hoff
1. września 2008 в 6:55
2008-09-01T06:55:23+00:00
Więcej
Źródło
Edytuj
#8434689

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));
Magnus Hoff
Magnus Hoff
Edytowana odpowiedź 6. października 2014 в 6:44
126
0
Do you have a question? Add it on the site and get an answer instantly
en.kzen.dev
Ted Percival
Ted Percival
1. września 2008 в 6:50
2008-09-01T06:50:31+00:00
Więcej
Źródło
Edytuj
#8434688
sizeof(array) / sizeof(array[0])
12
0
Dodaj pytanie
Kategorie
Wszystkie
Technologia
Kultura / Rekreacja
Życie / Sztuka
Nauka
Profesjonalny
Biznes
Użytkownicy
Wszystkie
Nowy
Popularny
1
Andrei Kalinin
Zarejestrowany 2 tygodnie temu
2
Koroleva Ego
Zarejestrowany 1 miesiąc temu
3
Star Lenon
Zarejestrowany 1 miesiąc temu
4
Данил Жевнеров
Zarejestrowany 1 miesiąc temu
5
Анна Литвиненко
Zarejestrowany 2 miesiące temu
Do you have a question? Add it on the site and get an answer instantly
en.kzen.dev
BG
DA
DE
EL
ES
FR
ID
IT
JA
KO
LT
LV
NL
NO
PL
PT
RO
RU
TR
ZH
© kzen.dev 2023
Źródło
stackoverflow.com
na podstawie licencji cc by-sa 3.0 z przypisaniem