#include #include #include #include struct Student { char name[17]; uint16_t year; float gpa; unsigned gender : 1; uint8_t courses; Student* leader; }; void printStudentInfo(const Student &student) { std::cout << "Имя: " << student.name << std::endl; std::cout << "Год поступления: " << student.year << std::endl; std::cout << "Средний балл: " << student.gpa << std::endl; std::cout << "Пол: " << (student.gender ? "Мужской" : "Женский") << std::endl; std::cout << "Количество пройденных курсов: " << static_cast(student.courses) << std::endl; std::cout << "Указатель на старосту: " << student.leader << std::endl; } void printMemoryLayout(const Student &student) { std::cout << "Адрес структуры: " << &student << std::endl; std::cout << "Смещение имени: " << offsetof(Student, name) << ", размер: " << sizeof(student.name) << std::endl; std::cout << "Смещение года поступления: " << offsetof(Student, year) << ", размер: " << sizeof(student.year) << std::endl; std::cout << "Смещение среднего балла: " << offsetof(Student, gpa) << ", размер: " << sizeof(student.gpa) << std::endl; // Убираем попытку использования offsetof для gender // std::cout << "Смещение пола: " << offsetof(Student, gender) << ", размер: 1 бит" << std::endl; std::cout << "Пол: значения 1 бит (внутренний порядок не определен для offset-of)" << std::endl; std::cout << "Смещение курсов: " << offsetof(Student, courses) << ", размер: " << sizeof(student.courses) << std::endl; std::cout << "Смещение указателя на старосту: " << offsetof(Student, leader) << ", размер: " << sizeof(student.leader) << std::endl; std::cout << "Шестнадцатеричное представление студентской структуры: "; const unsigned char* bytes = reinterpret_cast(&student); for (size_t i = 0; i < sizeof(Student); ++i) { std::cout << std::hex << std::setw(2) << std::setfill('0') << static_cast(bytes[i]) << " "; } std::cout << std::dec << std::endl; } int main() { Student student1 = {"Alice", 2021, 3.8, 0, 5, nullptr}; Student student2 = {"Bob", 2021, 3.5, 1, 6, &student1}; Student starosta = {"Charlie", 2020, 4.0, 1, 8, nullptr}; Student students[] = {student1, student2, starosta}; std::cout << "Адрес массива: " << &students << ", размер: " << sizeof(students) << std::endl; for (size_t i = 0; i < 3; ++i) { std::cout << "\n--- Студент " << i + 1 << " ---" << std::endl; printStudentInfo(students[i]); printMemoryLayout(students[i]); } return 0; }