С++ для начинающих




Оператор sizeof


Оператор sizeof возвращает размер в байтах объекта или типа данных. Синтаксис его таков:

sizeof ( type name );

sizeof ( object );

sizeof object;

Результат имеет специальный тип size_t, который определен как typedef в заголовочном файле cstddef. Вот пример использования обеих форм оператора sizeof:

#include <cstddef>

int ia[] = { 0, 1, 2 };

// sizeof возвращает размер всего массива

size_t array_size = sizeof ia;

// sizeof возвращает размер типа int

size_t element_size = array_size / sizeof( int );

Применение sizeof к массиву дает количество байтов, занимаемых массивом, а не количество его элементов и не размер в байтах каждого из них. Так, например, в системах, где int хранится в 4 байтах, значением array_size будет 12. Применение sizeof к указателю дает размер самого указателя, а не объекта, на который он указывает:

int *pi = new int[ 3 ];

size_t pointer_size = sizeof ( pi );

Здесь значением pointer_size будет память под указатель в байтах (4 в 32-битных системах), а не массива ia.

Вот пример программы, использующей оператор sizeof:

#include <string>

#include <iostream>

#include <cstddef>

int main() {

    size_t ia;

    ia = sizeof( ia ); //       правильно

    ia = sizeof ia;    //       правильно

    // ia = sizeof int; // ошибка

    ia = sizeof( int ); // правильно

    int *pi = new int[ 12 ];

    cout << "pi: " << sizeof( pi )

         << " *pi: " << sizeof( pi )

         << endl;

    // sizeof строки не зависит от

    // ее реальной длины

    string stl( "foobar" );

    string st2( "a mighty oak" );

    string *ps = &stl;

    cout << " st1: " << sizeof( st1 )

         << " st2: " << sizeof( st2 )

         << " ps: sizeof( ps )

         << " *ps: " << sizeof( *ps )

         << endl;

    cout << "short :\t"    << sizeof(short)    << endl;




Содержание  Назад  Вперед