Spec-Zone.ru › C

Оператор sizeof

Запрашивает размер объекта или типа.

Используется, когда необходимо узнать фактический размер объекта.

Синтаксис

sizeof( тип ) (1)
sizeof выражение (2)

Оба варианта возвращают значение типа size_t.

Объяснение

1) Возвращает размер, в байтах, представления объекта типа тип.
2) Возвращает размер, в байтах, представления объекта типа выражение. К выражение не применяются неявные преобразования.

Примечания

В зависимости от архитектуры компьютера, байт может содержать 8 или более бит, точное число указано как CHAR_BIT.

sizeof(char), sizeof(signed char), и sizeof(unsigned char) всегда возвращают 1.

sizeof нельзя использовать с типами функций, неполными типами (включая void), или с битовыми полями lvalues.

При применении к операнду со структурой структуры или объединения результат представляет собой общее количество байтов в таком объекте, включая внутренние и хвостовые поля заполнения. Хвостовые поля заполнения обеспечивают выполнение требований выравнивания следующего элемента массива, в котором этот объект является элементом, другими словами sizeof(T) возвращает размер элемента массива T[].

Если тип является типом переменной длины массива (VLA), и изменение значения выражения его размера не повлияет на результат sizeof, не определено, вычисляется ли выражение размера или нет.

(с C99)

За исключением случая, когда тип выражение является типом VLA,(с C99)выражение не вычисляется, и оператор sizeof может использоваться в целочисленном константном выражении.

Если тип выражения является типом массива переменной длины, выражение вычисляется, и размер массива, к которому оно относится, вычисляется во время выполнения.

(с C99)

Число элементов в любом массиве a включая VLA(с C99) может быть определено с помощью выражения sizeof a / sizeof a[0]. Обратите внимание, что если a имеет тип указателя (например, после преобразования массива в указатель для корректировки типа параметра функции), это выражение просто разделит количество байтов в типе указателя на количество байтов в типе, на который указывает указатель.

Ключевые слова

sizeof

Пример

Выходные данные соответствуют платформе с 64-битными указателями и 32-битными целыми числами

#include <stdio.h>
 
int main(void)
{
    short x;
    // type argument:
    printf("sizeof(float)          = %zu\n", sizeof(float));
    printf("sizeof(void(*)(void))  = %zu\n", sizeof(void(*)(void)));
    printf("sizeof(char[10])       = %zu\n", sizeof(char[10]));
//  printf("sizeof(void(void))     = %zu\n", sizeof(void(void))); // Error: function type
//  printf("sizeof(char[])         = %zu\n", sizeof(char[])); // Error: incomplete type
 
    // expression argument:
    printf("sizeof 'a'             = %zu\n", sizeof 'a'); // type of 'a' is int
//  printf("sizeof main            = %zu\n", sizeof main); // Error: Function type
    printf("sizeof &main           = %zu\n", sizeof &main);
    printf("sizeof \"hello\"         = %zu\n", sizeof "hello"); // type is char[6]
    printf("sizeof x               = %zu\n", sizeof x); // type of x is short
    printf("sizeof (x+1)           = %zu\n", sizeof(x + 1)); // type of x+1 is int
}

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

sizeof(float)          = 4
sizeof(void(*)(void))  = 8
sizeof(char[10])       = 10
sizeof 'a'             = 4
sizeof &main           = 8
sizeof "hello"         = 6
sizeof x               = 2
sizeof (x+1)           = 4

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2023):
    • 6.5.3.4 Операторы sizeof и alignof (стр: TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
    • 6.5.3.4 Операторы sizeof и _Alignof (стр: TBD)
  • Стандарт C11 (ISO/IEC 9899:2011):
    • 6.5.3.4 Операторы sizeof и _Alignof (стр: 90-91)
  • Стандарт C99 (ISO/IEC 9899:1999):
    • 6.5.3.4 Оператор sizeof (стр: 80-81)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
    • 3.3.3.4 Оператор sizeof

См. также

Документация C++ для sizeof оператора

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/language/sizeof

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API