Операция sizeof. Операция ?:

Операция sizeof. Операция ? :


Содержание



1. Какое назначение операции sizeof в программах на C++?

Операция sizeof предназначена для определения размера типа данных, переменной базового типа, переменной структурного типа, числового значения, строчного значения и т.п.

Операция sizeof есть полезной в случаях, когда необходимо динамически выделять память для переменных. В этом случае нужно знать объем памяти, которую занимает объект того или другого типа.

Общий вид операции sizeof:

sizeof(тип_или_переменная)

где

  • тип_или_переменная – название типа данных или переменной (объекта), которая используется на данный момент в программе.

2. Примеры использования операции sizeof для базовых типов и числовых значений

В приведенном ниже фрагменте кода приведен пример определения размера переменной базового типа, числового значения, строчного значения или результата выражения.

// операция sizeof
int a;
short int b;
float x;
double y;
long double z;
int size;

size = sizeof(b); // size = 2
size = sizeof(int); // size = 4
size = sizeof(a); // size = 4
size = sizeof(x); // size = 4
size = sizeof(double); // size = 8
size = sizeof(z); // size = 8
size = sizeof(long double);
size = sizeof(bool); // size = 1
size = sizeof(true); // size = 1
size = sizeof(28); // size = 4 - как тип int
size = sizeof(9.8 + 5); // size = 8 - как тип double
size = sizeof("Hello world!"); // size = 13
size = sizeof('\n'); // size = 1

 

3. Как определить размер структурной переменной? Пример

Пусть задана структурная переменная, описывающая данные о студенте. Шаблон структуры описывается в отдельном файле «MyStruct_Student.h»:

struct Student
{
    char name[70];
    int age;
    char address[100];
};

Тогда, чтобы определить объем памяти, который выделяется для переменной типа struct Student, можно написать следующий программный код:

#include "MyStruct_Student.h"

...

// определение размера структурной переменной
int size;
Student ST;

size = sizeof(struct Student); // size = 176
size = sizeof(ST); // size = 176

...

4. Как определить размер массива чисел? Пример
// определение размера массива
int A[100]; // массив из 100 целых чисел
float X[200]; // массив из 200 вещественных чисел
int size;

size = sizeof(A); // size = 4 * 100 = 400
size = sizeof(X); // size = 4 * 200 = 800

5. Как определить размер массива структур? Пример

Пусть задана структурная переменная, описывающая данные о студенте. Шаблон структуры описывается в отдельном файле «MyStruct_Student.h»:

struct Student
{
    char name[70];
    int age;
    char address[100];
};

Программный код, который определяет размер массива из 100 структурных переменных типа Student, будет иметь следующий вид:

#include "MyStruct_Student.h"

...

// определение размера массива структур
Student A[100]; // массив из 100 структур типа Student
int size;
size = sizeof(A); // size = 176 * 100 = 17600

6. Как определить размер объекта (экземпляра) класса? Пример

Пусть в модуле «MyClass.h» описывается класс с именем MyPoint:

class MyPoint
{
    private: int x, y;

    public:
        int GetX(void)
        {
            return x;
        }

        int GetY(void)
        {
            return y;
        }

        void SetXY(int nx, int ny)
        {
            x = nx;
            y = ny;
            return;
        }
};

Чтобы определить размер памяти, которая выделяется для объекта этого класса, нужно написать такой программный код:

#include "MyClass.h"

...

// размер объекта класса
MyPoint P1;
int size;

size = sizeof(P1); // size = 8
size = sizeof(MyPoint); // size = 8

...

Как видно из результата, операция sizeof() определяет объем памяти, который выделяется под переменные (поля) класса.

7. Как определить размер массива объектов класса? Пример

Пусть в модуле «MyClass.h» описывается класс с именем MyPoint:

class MyPoint
{
    private: int x, y;

    public:
        int GetX(void)
        {
            return x;
        }

        int GetY(void)
        {
            return y;
        }

        void SetXY(int nx, int ny)
        {
            x = nx;
            y = ny;
            return;
        }
};

Тогда, фрагмент программного кода, который определяет размер массива из 20 объектов класса MyPoint, будет иметь вид:

#include "MyClass.h"

...

// размер массива объектов класса
MyPoint P1[20];
int size;

size = sizeof(P1); // size = 8 * 20 = 160

...

8. Какой общий вид в программе имеет тернарная операция ? : ?

Тернарная операция ? : может заменять оператор условного перехода if … else. Общий вид операции ? : следующий:

выражение1 ? выражение2 : выражение3

где

  • выражение1 – любое логическое выражение, результатом которого есть значение true или false;
  • выражение2 – выражение, которое будет вычисляться, если значение выражение1 = true;
  • выражение3 – выражение, которое будет вычисяться, если значение выражение1 = false.

9. Примеры использования операции ? :

В нижеследующем фрагменте кода вычисляется минимальное значение между двумя переменными a и b:

// операция ? :
// минимальное значение между двумя числами
int a, b;
int min;

a = 15;
b = 8;
min = a > b ? b : a; // min = 8


Связанные темы