Родитель
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;
|
||||
}
|
Загрузка…
Ссылка в новой задаче