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

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


sizeof

Различия

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

Ссылка на это сравнение

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