main
TimofeevAnM 3 месяцев назад
Родитель d9e0562145
Сommit ece2303537

@ -0,0 +1,84 @@
#include <iostream>
#include <iomanip>
#include <cstddef> // Для offsetof
#include <cstring> // Для 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<void*>(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<int>(reinterpret_cast<uint8_t*>(&students[i])[j]) << " ";
}
std::cout << std::dec << std::endl; // Сброс формата обратно в десятичный
}
return 0;
}
Загрузка…
Отмена
Сохранить