Оператор sizeof

Возвращает размер своего операнда относительно размера типа char.

Примечание

Дополнительные сведения об операторе sizeof ... см. в разделе Многоточия и шаблоны с переменными аргументами.

sizeof unary-expression sizeof  ( type-name )

Заметки

Результат оператора sizeof имеет тип size_t, целочисленный тип, определенный во включаемом файле STDDEF.H. Этот оператор позволяет избежать задания зависимых от компьютера размера данных в программах.

Оператор sizeof может иметь один из следующих операндов.

  • Имя типа. Если оператор sizeof используется с именем типа, оно должно быть заключено в скобки.

  • Выражения. Если оператор sizeof используется с выражением, его можно определять как со скобками, так и без них. Значение выражения не вычисляется.

Если оператор sizeof применяется к объекту типа char, он дает результат 1. Если оператор sizeof применяется к массиву, то результатом является не размер указателя, представленного идентификатором массива, а общее количество байтов в этом массиве. Чтобы получить размер указателя, представленного идентификатором массива, передайте его в качестве параметра в функцию, в которой используется оператор sizeof. Например:

Пример

#include <iostream>
using namespace std;

size_t getPtrSize( char *ptr )
{
   return sizeof( ptr );
}

int main()
{
   char szHello[] = "Hello, world!";

   cout  << "The size of a char is: "
         << sizeof( char )
         << "\nThe length of " << szHello << " is: "
         << sizeof szHello
         << "\nThe size of the pointer is "
         << getPtrSize( szHello ) << endl;
}

Пример результатов выполнения

The size of a char is: 1
The length of Hello, world! is: 14
The size of the pointer is 4

Если оператор sizeof применяется к объекту типа class, struct или union, то результатом будет число байт в объекте этого типа, плюс любое заполнение, которое добавляется для выравнивания членов в границах слова. Результат не обязательно должен соответствовать размеру, вычисляемому путем добавления требований к хранению отдельных членов. Параметр компилятора /Zp и директива #pragma pack влияют на границы выравнивания для членов.

Оператор sizeof никогда не создает результат 0, даже для пустого класса.

Оператор sizeof не может использоваться со следующими операндами.

  • Функции. (Однако оператор sizeof можно применять к указателям на функции.)

  • Битовые поля.

  • Неопределенные классы.

  • Тип void.

  • Динамически создаваемые массивы.

  • Внешние массивы.

  • Неполные типы.

  • Заключенные в скобки имена неполных типов.

Если оператор sizeof применяется к ссылке, он создает такой же результат, как если бы sizeof был применен к самому объекту.

Если безразмерный массив является последним элементом структуры, оператор sizeof возвращает размер структуры без массива.

Оператор sizeof часто используется для вычисления количества элементов в массиве с помощью выражения следующего вида.

sizeof array / sizeof array[0]

См. также

Ссылки

Выражения с унарными операторами

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