Поделиться через


Оператор 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 невозможно изменить.

См. также

Операторы в C
Операторы C++, приоритет и ассоциативность