Оператор sizeof (C)
Оператор sizeof
предоставляет объем хранения (в байтах), необходимого для хранения объекта типа "операнд". Этот оператор позволяет избежать задания зависимых от компьютера размера данных в программах.
Синтаксис
sizeof unary-expression
sizeof ( type-name )
Замечания
Операнд является либо любым идентификатором unary-expression, либо выражением type-cas (то есть описателем типа, заключенным в скобки). unary-expression не может представлять объект битового поля, неполный тип или указатель функции. Результатом является целочисленная константа без знака. Стандартный заголовок STDDEF.H определяет этот тип как size_t.
При применении оператора sizeof
к идентификатору массива результатом является размер целого массива, а не размер указателя, представленного идентификатором массива.
При применении оператора sizeof
к имени структуры или типа объединения, идентификатору структуры или типа объединения, результатом является число байтов в структуре или объединении, включая внутреннее и конечное заполнение. Этот размер может включать внутреннее и конечное заполнение, используемое для выравнивания элементов структуры или объединения относительно границ памяти. Таким образом, результат может не соответствовать размеру, вычисленному путем добавления требований к хранению отдельных элементов.
Если безразмерный массив является последним элементом структуры, оператор sizeof
возвращает размер структуры без массива.
buffer = calloc(100, sizeof (int) );
В этом примере для передачи размера объекта int
, который меняется в зависимости от компьютеров, как аргумент функции времени выполнения с именем calloc
, используется оператор sizeof
. Значение, возвращаемое функцией, хранится в buffer
.
static char *strings[] = {
"this is string one",
"this is string two",
"this is string three",
};
const int string_no = ( sizeof strings ) / ( sizeof strings[0] );
В этом примере strings
— это массив указателей на char
. Число указателей — это число элементов в массиве, но оно не определено. Легко определить количество указателей с помощью оператора sizeof
, вычислив число элементов в массиве. Значение целого числа const
string_no
инициализируется до этого числа. Поскольку это значение const
, string_no
невозможно изменить.