Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Оператор sizeof
предоставляет объем хранения (в байтах), необходимого для хранения объекта типа "операнд". Этот оператор позволяет избежать задания зависимых от компьютера размера данных в программах.
Синтаксис
sizeof unary-expression
sizeof ( type-name )
Замечания
Операнд является либо любым идентификатором unary-expression, либо выражением type-cas (то есть описателем типа, заключенным в скобки). unary-expression не может представлять объект битового поля, неполный тип или указатель функции. Результатом является целочисленная константа без знака. Стандартный заголовок STDDEF.H определяет этот тип как size_t.
При применении оператора sizeof
к идентификатору массива результатом является размер целого массива, а не размер указателя, представленного идентификатором массива.
При применении оператора sizeof
к имени структуры или типа объединения, идентификатору структуры или типа объединения, результатом является число байтов в структуре или объединении, включая внутреннее и конечное заполнение. Этот размер может включать внутреннее и конечное заполнение, используемое для выравнивания элементов структуры или объединения относительно границ памяти. Таким образом, результат может не соответствовать размеру, вычисленному путем добавления требований к хранению отдельных элементов.
Если безразмерный массив является последним элементом структуры, оператор sizeof
возвращает размер структуры без массива.
buffer = calloc(100, sizeof (int) );
В этом примере для передачи размера объекта int
, который меняется в зависимости от компьютеров, как аргумент функции времени выполнения с именем calloc
, используется оператор sizeof
. Значение, возвращаемое функцией, хранится в buffer
.
static char *strings[] = {
"this is string one",
"this is string two",
"this is string three",
};
const int string_no = ( sizeof strings ) / ( sizeof strings[0] );
В этом примере strings
— это массив указателей на char
. Число указателей — это число элементов в массиве, но оно не определено. Легко определить количество указателей с помощью оператора sizeof
, вычислив число элементов в массиве. Значение целого числа const
string_no
инициализируется до этого числа. Поскольку это значение const
, string_no
невозможно изменить.