#include #include #include // Для offsetof #include // Для strcpy struct Student { char name[17]; // Имя (массив из 17 символов) uint16_t year; // Год поступления (беззнаковое целое, 2 байта) float gpa; // Средний балл (с плавающей запятой) unsigned int gender : 1; // Пол (1 бит, 0 — женский, 1 — мужской) uint16_t courses; // Количество пройденных курсов Student* leader; // Указатель на старосту группы (для старосты — нулевой указатель) }; int main() { // Объявление массива из трех студентов Student students[3]; // Заполнение данных для студентов strcpy(students[0].name, "Alice"); students[0].year = 2021; students[0].gpa = 4.5; students[0].gender = 0; // Женский students[0].courses = 5; students[0].leader = nullptr; // Не староста strcpy(students[1].name, "Bob"); students[1].year = 2021; students[1].gpa = 3.8; students[1].gender = 1; // Мужской students[1].courses = 6; students[1].leader = &students[2]; // Староста strcpy(students[2].name, "Charlie"); students[2].year = 2020; students[2].gpa = 4.0; students[2].gender = 1; // Мужской students[2].courses = 7; students[2].leader = nullptr; // Не староста // 3.3.1 Адрес и размер массива std::cout << "Address of students array: " << &students << std::endl; std::cout << "Size of students array: " << sizeof(students) << " bytes" << std::endl; // 3.3.2 Адреса и размеры всех элементов массива for (int i = 0; i < 3; ++i) { std::cout << "Address of student[" << i << "]: " << &students[i] << std::endl; std::cout << "Size of student[" << i << "]: " << sizeof(students[i]) << " bytes" << std::endl; } // 3.3.3 Информация о полях структуры Student& student = students[0]; // Возьмем первого студента для примера std::cout << "Field information for student[0]:" << std::endl; std::cout << "Name address: " << static_cast(student.name) << ", Offset: " << offsetof(Student, name) << ", Size: " << sizeof(student.name) << " bytes" << std::endl; std::cout << "Year address: " << &student.year << ", Offset: " << offsetof(Student, year) << ", Size: " << sizeof(student.year) << " bytes" << std::endl; std::cout << "GPA address: " << &student.gpa << ", Offset: " << offsetof(Student, gpa) << ", Size: " << sizeof(student.gpa) << " bytes" << std::endl; std::cout << "Courses address: " << &student.courses << ", Offset: " << offsetof(Student, courses) << ", Size: " << sizeof(student.courses) << " bytes" << std::endl; // 3.3.4 Элементы массива в шестнадцатеричном виде std::cout << "Students array in hexadecimal:" << std::endl; for (int i = 0; i < 3; ++i) { std::cout << "student[" << i << "]: "; for (size_t j = 0; j < sizeof(students[i]); ++j) { std::cout << std::hex << std::setw(2) << std::setfill('0') << static_cast(reinterpret_cast(&students[i])[j]) << " "; } std::cout << std::dec << std::endl; // Сброс формата обратно в десятичный } return 0; }