Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
92 строки
4.2 KiB
C++
92 строки
4.2 KiB
C++
#include <iostream>
|
|
#include <iomanip>
|
|
#include <cstdint>
|
|
#include <cstring>
|
|
#include <bitset>
|
|
|
|
using namespace std;
|
|
|
|
// Структура Student, описывающая студента
|
|
struct Student {
|
|
char name[17]; // Имя (массив из 17 символов, включая завершающий '\0')
|
|
uint16_t year; // Год поступления (беззнаковое целое, 2 байта)
|
|
float average_score; // Средний балл (с плавающей запятой)
|
|
uint8_t gender : 1; // Пол, представленный одним битом (0 — женский, 1 — мужской)
|
|
uint8_t courses_passed; // Количество пройденных курсов
|
|
Student* group_leader; // Указатель на структуру Student, описывающую старосту группы (для старосты — нулевой указатель)
|
|
};
|
|
|
|
int main() {
|
|
// Объявление массива из трех структур Student
|
|
Student students[3];
|
|
|
|
// Заполнение массива данными о студентах
|
|
strcpy(students[0].name, "Игорь");
|
|
students[0].year = 2022;
|
|
students[0].average_score = 3.38f;
|
|
students[0].gender = 1;
|
|
students[0].courses_passed = 1;
|
|
students[0].group_leader = &students[2];
|
|
|
|
strcpy(students[1].name, "Анна");
|
|
students[1].year = 2021;
|
|
students[1].average_score = 4.75f;
|
|
students[1].gender = 0;
|
|
students[1].courses_passed = 3;
|
|
students[1].group_leader = &students[2];
|
|
|
|
strcpy(students[2].name, "Мария");
|
|
students[2].year = 2020;
|
|
students[2].average_score = 4.92f;
|
|
students[2].gender = 0;
|
|
students[2].courses_passed = 5;
|
|
students[2].group_leader = nullptr;
|
|
|
|
// Печать адреса и размера массива
|
|
cout << "Address of array: " << &students << ", size: " << sizeof(students) << " bytes\n\n";
|
|
|
|
// Печать адресов и размеров всех элементов массива
|
|
for (int i = 0; i < 3; i++) {
|
|
cout << "Address of students[" << i << "]: " << &students[i]
|
|
<< ", size: " << sizeof(students[i]) << " bytes\n";
|
|
}
|
|
cout << '\n';
|
|
|
|
// Печать информации о полях структуры для студента Игоря
|
|
cout << "Information about fields of students[0] (Игорь):\n";
|
|
cout << "Name: address: " << &students[0].name
|
|
<< ", offset: " << offsetof(Student, name)
|
|
<< ", size: " << sizeof(students[0].name) << " bytes\n";
|
|
cout << "Year: address: " << &students[0].year
|
|
<< ", offset: " << offsetof(Student, year)
|
|
<< ", size: " << sizeof(students[0].year) << " bytes"
|
|
<< ", hex: " << hex << setw(4) << setfill('0') << students[0].year
|
|
<< ", bin: " << bitset<16>(students[0].year) << '\n';
|
|
cout << "Average score: address: " << &students[0].average_score
|
|
<< ", offset: " << offsetof(Student, average_score)
|
|
<< ", size: " << sizeof(students[0].average_score) << " bytes\n";
|
|
cout << "Courses passed: address: " << reinterpret_cast<void*>(&students[0].courses_passed)
|
|
<< ", offset: " << offsetof(Student, courses_passed)
|
|
<< ", size: " << sizeof(students[0].courses_passed) << " bytes"
|
|
<< ", hex: " << hex << static_cast<int>(students[0].courses_passed)
|
|
<< ", bin: " << bitset<8>(students[0].courses_passed) << '\n';
|
|
cout << "Group leader: address: " << &students[0].group_leader
|
|
<< ", offset: " << offsetof(Student, group_leader)
|
|
<< ", size: " << sizeof(students[0].group_leader) << " bytes\n\n";
|
|
|
|
// Печать всех элементов массива в шестнадцатеричном виде
|
|
cout << "Array elements in hex:\n";
|
|
for (int i = 0; i < 3; i++) {
|
|
cout << "students[" << i << "]:\n";
|
|
const uint8_t* bytes = reinterpret_cast<const uint8_t*>(&students[i]);
|
|
for (size_t j = 0; j < sizeof(Student); j++) {
|
|
cout << hex << setw(2) << setfill('0') << static_cast<int>(bytes[j]) << ' ';
|
|
if ((j + 1) % 16 == 0) {
|
|
cout << '\n';
|
|
}
|
|
}
|
|
cout << '\n';
|
|
}
|
|
|
|
return 0;
|
|
} |