Эта операция выполняется на стадии компиляции. Результатом этой операции является число байтов, необходимое для размещения объекта в памяти. Существует два варианта синтаксиса этой операции. В первом из них единственный операнд операции определяет некоторый тип языка, и он должен быть заключен в скобки:
sizeof ( float ) sizeof ( int )
Во втором операнд задает некоторое выражение и здесь использование скобок необязательно:
sizeof a; sizeof *ip; sizeof array[ i ];
Заметим, что при получении размеров массивов, несмотря на то, что имя массива является указателем, результатом операции sizeof array, где array - имя некоторого массива, является длина в байтах этого массива. Это свойство можно использовать для вычисления числа элементов в массиве:
const n = 20; int array [n]; . . . int num=sizeof array / sizeof(int) // num = = 20.
Результатом операции sizeof над ссылкой является длина типа, с которым сопоставлена ссылка, т.е. sizeof( double & ) и sizeof( double ) эквивалентны.
Наверняка, вы предполагаете, что размер структуры равен сумме размеров ее членов. Это не так. Вследствие выравнивания объектов разной длины в структуре могут появляться безымянные "дыры". Так, например, если переменная типа char занимает один байт, а int - четыре байта, то для структуры:
#include <iostream>
using namespace std;
struct Test
{
char c;
int i;
};
void main ()
{
Test d={'#',78};
cout<<sizeof(Test)<<" "<<sizeof(d)<<"\n\n";
}
может потребоваться восемь байт, а не пять. Правильное значение возвращает операция sizeof.