size_t
Материал из cppreference.com
<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), зависящий от модели данных.
|
Битовая ширина |
(начиная с 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>
См. также
| целый тип со знаком, значение которого возвращается при вычитании двух указателей (определение типа) | |
| смещение в байтах от начала структуры до указанного элемента (функция-макрос) | |
Документация C++ по size_t
| |