Инструменты пользователя

Инструменты сайта


sizeof

Операция sizeof

Эта операция выполняется на стадии компиляции. Результатом этой операции является число байтов, необходимое для размещения объекта в памяти. Существует два варианта синтаксиса этой операции. В первом из них единственный операнд операции определяет некоторый тип языка, и он должен быть заключен в скобки:

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 ) эквивалентны.

  • Размеры структуры struct

Наверняка, вы предполагаете, что размер структуры равен сумме размеров ее членов. Это не так. Вследствие выравнивания объектов разной длины в структуре могут появляться безымянные "дыры". Так, например, если переменная типа 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.

sizeof.txt · Последние изменения: 2010/10/14 15:47 (внешнее изменение)

Яндекс.Метрика