Оператор 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]