Основи програмування на С ++ для початківців

Структуры в C . Частина 2

Со структурами C мы предварительно познакомились в предыдущей статье. Продолжаем знакомство.

Определение структури бажано розташовувати за межами main() функции. Тогда работать с ней смогут и другие определенные программистом функции, как показано в нашем примере из первой части. Такое объявление называют внешним.

Инициализация. Елементи структури можна форматувати відразу при оголошенні об'єкту.

Объявляем объект volume1 в строке 13 и проводим его инициализацию.  Схоже на ініціалізацію елементів масиву – в фигурных скобках и через запятую. Эти данные запишутся в соответствующие элементы структуры по порядку. В каком порядке определены элементы в структуре – в таком и произойдет запись значений. Операцію одно можна не використовувати (согласно C 11).

Рассмотрим такую инициализацию на примере с более сложной структурой WonderfulWoman:

структури з ++, структури c ++, структура C ++. вкладені структури

Об'єкт цієї структури можна форматувати так:

структури з ++, структури c ++, структура C ++. вкладені структури

Але якщо структура містить більше двох-трьох елементів -Бажано так не робити. Это немного запутывает и усложняет читаемость и понимание программы.

Объявление объектов. Создать объект структуры можно сразу во время её определения. Для цього необхідно дати ім'я об'єкту між крапкою з комою і закриває фігурної дужки:

В С есть возможность определить структуру без дескриптора (без имени типа):

В таком случае надо обязательно объявлять объекты в определении структуры. В главной функции вы уже не сможете создать другие объекты этой структуры, так как дескриптора нет. Цей прийом є сенс застосовувати, если объектов структуры будет очень мало – 1 или 2.

Присваивание (=) для структур. Для объектов одной структуры можно применить операцию присваивания = . Операция присвоит элементам одного объекта значения элементов второго объекта.

Это так называемое поэлементное или почленное присваивание. На экране:

структури з ++, структури c ++, структура C ++. вкладені структури

Сработало – всі елементи об'єкта структуриvolume2 стали рівні елементів об'єктаvolume1.

Пам'ять займана структурою. Рассмотрим пример: використовуючи операторsizeof, узнаем сколько памяти занимает каждый элемент структуры в отдельности. Порахуємо загальний обсяг пам'яті елементів. потім застосуємоsizeof к объекту структуры и увидим, що розміри не співпадають.

На экране:

структури з ++, структури c ++, структура C ++. вкладені структури

sizeof показал нам сколько памяти занимает каждый элемент структуры HandsomeMan. Мы эти значения суммировали и получили 25. То есть по идее структура должна занимать 25 байт оперативной памяти. Но когда мы применяем оператор sizeof  до структури – получаем значение 28.

Размер объекта структуры не всегда равен сумме размеров его элементов.  Так трапляється через вирівнювання елементів різної довжини. Тому в структурі можуть зустрічатися безіменні ділянки пам'яті. Если вам надо знать сколько в действительности занимает структура в памяти – отриманоsizeof , как в примере.

Это видео из предыдущего урока. Кто не смотрел – уделите время

Мы узнали как определять структуры, как объявлять и инициализировать их объекты. Якщо нам знадобиться створити більше ніж 2-3 об'єкти структури, тогда лучше создать массив структур. Эту тему рассмотрим в следующей статье.

6 думки про "Структуры в C . Частина 2

  1. дивно, але з ім'ям в структурі біда, а точніше коли вводиш
    обсяг = { “имя”, і т.д ;

  2. Дан масив, в якому зберігаються дані про розклад поїздів на сього-
    дняшній день: номер поїзда, назва (т.е. звідки куди, например, новий-
    Російсько-Москва), час прибуття на станцію і час відправлення (годинник,
    хвилини). За даним часу визначити, які з поїздів стоять зараз на
    станції.

  3. Потрібно вивести дані тих студентів, у яких оцінки з математики 8 или 9 і прізвище починається на А. Чому не можна не можна порівнювати адресу і щось ще в операторі if??
    #include
    using namespace std;

    Struct Сорти // цю структуру ми вкладемо в структуру Student
    {
    фізика ІНТ;
    Int математики;
    ІНТ інформатика;
    ІНТ хімія;
    };

    структура Student
    {
    char surname[32];
    ІНТ year_of_birth;
    ІНТ number_of_groope;
    оцінки semester_grades; // вкладена структура(оцінки за семестр)
    подвійний average_score;//середній бал
    };

    void showData( Студент * Obj);
    недійсний showData_input(Студент * Obj);

    int main()
    {
    setlocale(LC_ALL, “rus”);

    дані Student[1];

    for (int i = 0; i < 3; i )
    {
    cout << i + 1 << " студент: " << endl;
    showData_input(&дані[i]);
    showData(&дані[i]);
    if ((&дані[i].surname[0]) == 'A' && (&дані[i].semester_grades.maths == 8 || 9))
    {
    showData(&дані[i]);
    }

    }

    system("pause");
    return 0;
    }

    void showData( Студент * Obj)
    {
    setlocale(LC_ALL, "rus");
    cout << "Фамилия: " <surname << endl;
    cout << "Год рождения: " <рік народження << endl;
    cout << "Номер группы: " <number_of_groope << endl;
    cout << " Оцінки за семестр: \nFizika: " <semester_grades.physics << "Математика: " <semester_grades.maths << "Информатика: " <semester_grades.informatics<<"Химия: " <semester_grades.chemistry << endl;
    cout << "Средний балл: "<average_score;
    cout << endl;

    }
    недійсний showData_input(Студент * Obj)
    {
    setlocale(LC_ALL, "rus");
    cout << "__________________" << endl;
    cout << "Input student data" << endl;
    cout << "__________________" << endl;

    cout <> Obj->surname;
    cout <> Obj->рік народження;
    cout <> Obj->number_of_groope;
    cout <> Obj->semester_grades.physics >> Obj->semester_grades.maths >> Obj->semester_grades.informatics >> Obj-> semester_grades.chemistry;
    cout <> Obj->average_score;
    cout << endl;

    }

  4. Чет знову без будь-яких пояснень вилазять нові терміни та рядки, особливо у відео цього багато.

Залишити коментар до gordgel Скасувати відповідь

Ваша електронна адреса не буде опублікований. Обов'язкові поля позначені * *