rozmiar_t to typ danych typu unsigned integer zdefiniowany w różnych plikach nagłówkowych, takich jak:
, , , , ,>
Jest to typ używany do reprezentowania rozmiaru obiektów w bajtach i dlatego jest używany jako typ zwracany przez rozmiar operator . Gwarantuje się, że będzie wystarczająco duży, aby pomieścić największy obiekt, jaki może obsłużyć system hosta. Zasadniczo maksymalny dopuszczalny rozmiar zależy od kompilatora; jeśli kompilator jest 32-bitowy, jest to po prostu typedef (tj. alias) dla bez znaku int ale jeśli kompilator jest 64-bitowy, byłby to typedef dla bez znaku, długi, długi . The rozmiar_t typ danych nigdy nie jest ujemny.
Dlatego wiele funkcji biblioteki C, takich jak malloc, memcpy i strlen zadeklaruj swoje argumenty i typ zwracany jako rozmiar_t . Na przykład,
C
selektor dokumentu.zapytania
// Declaration of various standard library functions.> // Here argument of 'n' refers to maximum blocks that can be> // allocated which is guaranteed to be non-negative.> void>*>malloc>(>size_t> n);> // While copying 'n' bytes from 's2' to 's1'> // n must be non-negative integer.> void>*>memcpy>(>void>* s1,>void> const>* s2,>size_t> n);> // strlen() uses size_t because the length of any string> // will always be at least 0.> size_t> strlen>(>char> const>* s);> |
>
>
rozmiar_t lub dowolny typ bez znaku może być używany jako zmienna pętli, ponieważ zmienne pętli są zwykle większe lub równe 0.
Notatka: Kiedy używamy a rozmiar_t obiektu, musimy się upewnić, że we wszystkich kontekstach, w których jest używany, łącznie z arytmetyką, chcemy tylko wartości nieujemnych. Na przykład następujący program z pewnością dałby nieoczekiwany wynik:
Przykład 1
C
// C program to demonstrate that size_t or> // any unsigned int type should be used> // carefully when used in a loop.> #include> #define N 10> int> main()> {> >int> a[N];> >// This is fine.> >for> (>size_t> n = 0; n a[n] = n; } // But reverse cycles are tricky for unsigned // types as they can lead to infinite loops. for (size_t n = N - 1; n>= 0; --n) printf('%d ', a[n]); }> |
wydrukuj tablicę w Javie
>
>
Output Infinite loop and then segmentation fault>
Przykład 2
- Typ danych size_t w języku C jest typem całkowitym bez znaku używanym do reprezentowania rozmiaru obiektów w bajtach. Jest zdefiniowany w nagłówku stddef.h i jest powszechnie używany do reprezentowania rozmiaru tablic, bloków pamięci i ciągów znaków.
- Oto przykładowy program demonstrujący użycie size_t:
C
wzorzec projektowy Java
#include> #include> int> main()> {> >int> array[5] = { 1, 2, 3, 4, 5 };> >size_t> size =>sizeof>(array);> >printf>(>'The size of the array is: %lu
'>, size);> >return> 0;> }> |
>
>
- w tym programie size_t służy do przechowywania rozmiaru tablicy w bajtach.
- Operator sizeof służy do określenia rozmiaru tablicy, który jest następnie przechowywany w zmiennej size typu size_t. Specyfikator formatu %lu służy do drukowania wartości size_t, która jest długą liczbą całkowitą bez znaku.
- Program wyprowadza Rozmiar tablicy: 20, czyli liczba bajtów zajmowanych przez tablicę (5 elementów * 4 bajty na element).
Zalety używania size_t w programowaniu w C:
- Ruchliwość : Typ danych size_t jest zdefiniowany w nagłówku stddef.h, który jest częścią standardowej biblioteki C. Używając size_t, możesz mieć pewność, że Twój kod będzie przenośny na różne platformy i kompilatory.
- Niepodpisany : size_t jest typem liczby całkowitej bez znaku, co oznacza, że może reprezentować rozmiary aż do maksymalnego rozmiaru liczb całkowitych bez znaku. Jest to przydatne w przypadku tablic i bloków pamięci, ponieważ rozmiary nigdy nie mogą być ujemne.
- Wydajność : size_t jest zwykle implementowany jako szybki i wydajny typ całkowity, a użycie go może skutkować lepszą wydajnością niż użycie innych typów całkowitych.
- Jasna intencja: Użycie size_t wyjaśnia czytelnikowi kodu, że masz do czynienia z rozmiarami, a nie innymi typami liczb całkowitych. Dzięki temu kod jest łatwiejszy do zrozumienia i mniej podatny na błędy.
- Normalizacja : Używając size_t, postępujesz zgodnie z powszechnie używanym i akceptowanym standardem, dzięki czemu Twój kod jest bardziej czytelny i łatwiejszy w utrzymaniu dla innych programistów.
- Interoperacyjność : size_t jest szeroko stosowany w wielu bibliotekach i interfejsach API, a użycie go w kodzie pozwala na łatwiejszą integrację z innym kodem.