Пространства имён
Варианты
Действия

size_t

Материал из cppreference.com
< c | types
<tbody> </tbody>
Определено в заголовочном файле <stddef.h>
Определено в заголовочном файле <stdio.h>
Определено в заголовочном файле <stdlib.h>
Определено в заголовочном файле <string.h>
Определено в заголовочном файле <time.h>
Определено в заголовочном файле <uchar.h>
(начиная с C11)
Определено в заголовочном файле <wchar.h>
(начиная с C95)
typedef /*implementation-defined*/ size_t;

size_t это беззнаковый целый тип результата sizeof, offsetof и _Alignof (до C23)alignof (начиная с C23), зависящий от модели данных.

Битовая ширина size_t не менее 16.

(начиная с C99)

Замечания

size_t может хранить максимальный размер теоретически возможного объекта любого типа (включая массив).

size_t обычно используется для индексации массивов и счётчиков циклов. Программы, использующие другие типы, такие как unsigned int, для индексации массивов могут работать неправильно на, например, 64-битных системах, когда индекс превышает UINT_MAX или если полагается на 32-битную модульную арифметику.

Возможная релизация

typedef typeof(sizeof(0)) size_t; // допустимо, начиная с C23

Пример

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

Возможный вывод:

sum = 5050
size = 404
SIZE_MAX = 18446744073709551615

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2023):
  • 7.19 Общие определения <stddef.h> (стр. TBD)
  • 7.20.3 Границы других целых типов (стр. TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.19 Общие определения <stddef.h> (стр. 211)
  • 7.20.3 Границы других целых типов (стр. 215)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.19 Общие определения <stddef.h> (стр. 288)
  • 7.20.3 Границы других целых типов (стр. 293)
  • Стандарт C99 (ISO/IEC 9899:1999):
  • 7.17 Общие определения <stddef.h> (стр. 253)
  • 7.18.3 Границы других целых типов (стр. 258)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
  • 4.1.6 Общие определения <stddef.h>

См. также

целый тип со знаком, значение которого возвращается при вычитании двух указателей
(определение типа) [править]
смещение в байтах от начала структуры до указанного элемента
(функция-макрос) [править]