diff --git a/lab04/main.cpp b/lab04/main.cpp index 34d1b6d..dca8eff 100644 --- a/lab04/main.cpp +++ b/lab04/main.cpp @@ -2,6 +2,7 @@ #include #include #include +#include using namespace std; @@ -94,6 +95,15 @@ void print_in_binary(uint16_t value) { cout << bits; } +struct Student { + char name[17]; // 17 байт + uint16_t year; // 2 байта + float gpa; // 4 байта + unsigned gender : 1; // 1 бит (битовое поле) + uint8_t courses; // 1 байт + Student* monitor; // 8 байт (для 64-битной системы) +}; + int main() { // Тестирование чисел из лекционного слайда uint16_t a = 0x4d2; // 1234 в десятичной @@ -134,6 +144,45 @@ int main() { cout << "\n\nThe location of the structure in memory (binary):\n"; print_in_binary(arr, sizeof(arr)); + Student students[3] = { + {"Ivanov Ivan", 2023, 4.5f, 1, 3, &students[1]}, // 'f' suffix for float + {"Petrova Anna", 2022, 4.8f, 0, 4, nullptr}, + {"Sidorov Alex", 2023, 4.2f, 1, 2, &students[1]} + }; + + // Structure analysis + std::cout << "Array address: " << &students << std::endl; + std::cout << "Array size: " << sizeof(students) << " bytes\n\n"; + + for (size_t i = 0; i < 3; i++) { + std::cout << "Element " << i << ":\n"; + std::cout << "Address: " << &students[i] << std::endl; + std::cout << "Size: " << sizeof(students[i]) << " bytes\n"; + } + + + Student& s = students[0]; + std::cout << "\nFields of the first student:\n"; + std::cout << "name: Address=" << static_cast(s.name) + << " Offset=" << offsetof(Student, name) + << " Size=17 bytes\n"; + + std::cout << "year: Address=" << &s.year + << " Offset=" << offsetof(Student, year) + << " Size=2 bytes\n"; + + std::cout << "gpa: Address=" << &s.gpa + << " Offset=" << offsetof(Student, gpa) + << " Size=4 bytes\n"; + + std::cout << "courses:Address=" << static_cast(&s.courses) + << " Offset=" << offsetof(Student, courses) + << " Size=1 byte\n"; + + std::cout << "monitor:Address=" << &s.monitor + << " Offset=" << offsetof(Student, monitor) + << " Size=8 bytes\n"; + cout << endl; char op;