Defined in header <stddef.h>
Defined in header <stdio.h>
Defined in header <stdlib.h>
Defined in header <string.h>
Defined in header <time.h>
Defined in header <uchar.h> (since C11)
Defined in header <wchar.h> (since C95)
typedef /*implementation-defined*/ size_t;

size_t is the unsigned integer type of the result of sizeof , _Alignof (since C11) and offsetof, depending on the data model.

The bit width of size_t is not less than 16.

(since C99)


size_t can store the maximum size of a theoretically possible object of any type (including array).

size_t is commonly used for array indexing and loop counting. Programs that use other types, such as unsigned int, for array indexing may fail on, e.g. 64-bit systems when the index exceeds UINT_MAX or if it relies on 32-bit modular arithmetic.


#include <stdio.h>
#include <stddef.h>
#include <stdint.h>
int main(void)
    const size_t N = 100;
    int numbers[N];
    for (size_t ndx = 0; ndx < N; ++ndx)
        numbers[ndx] = ndx;
    printf("SIZE_MAX = %zu\n", SIZE_MAX);
    size_t size = sizeof numbers;
    printf("size = %zu\n", size);

Possible output:

SIZE_MAX = 18446744073709551615
size = 400


  • C17 standard (ISO/IEC 9899:2018):
    • 7.19 Common definitions <stddef.h> (p: 211)
    • 7.20.3 Limits of other integer types (p: 215)
  • C11 standard (ISO/IEC 9899:2011):
    • 7.19 Common definitions <stddef.h> (p: 288)
    • 7.20.3 Limits of other integer types (p: 293)
  • C99 standard (ISO/IEC 9899:1999):
    • 7.17 Common definitions <stddef.h> (p: 253)
    • 7.18.3 Limits of other integer types (p: 258)
  • C89/C90 standard (ISO/IEC 9899:1990):
    • 4.1.6 Common definitions <stddef.h>

See also

signed integer type returned when subtracting two pointers
byte offset from the beginning of a struct type to specified member
(function macro)
C++ documentation for size_t

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.