Что такое size_t в C? - PullRequest
       34

Что такое size_t в C?

556 голосов
/ 31 марта 2010

Я путаюсь с size_t в C. Я знаю, что он возвращается оператором sizeof. Но что именно это? Это тип данных?

Допустим, у меня есть for цикл:

for(i = 0; i < some_size; i++)

Должен ли я использовать int i; или size_t i;?

Ответы [ 12 ]

1 голос
/ 15 мая 2018

size_t или любой другой тип без знака может рассматриваться как переменная цикла, так как переменные цикла обычно больше или равны 0.

Когда мы используем объект size_t , мы должны убедиться, что во всех контекстах, в которых он используется, включая арифметику, нам нужны только неотрицательные значения. Например, следующая программа определенно даст неожиданный результат:

// C program to demonstrate that size_t or
// any unsigned int type should be used 
// carefully when used in a loop

#include<stdio.h>
int main()
{
const size_t N = 10;
int a[N];

// This is fine
for (size_t n = 0; n < N; ++n)
a[n] = n;

// But reverse cycles are tricky for unsigned 
// types as can lead to infinite loop
for (size_t n = N-1; n >= 0; --n)
printf("%d ", a[n]);
}

Output
Infinite loop and then segmentation fault
0 голосов
/ 08 марта 2013

Насколько я понимаю, size_t - это целое число unsigned, размер бит которого достаточно велик, чтобы содержать указатель на собственную архитектуру.

Итак:

sizeof(size_t) >= sizeof(void*)
...