Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

60 строки
2.6 KiB
C++

#include <iostream>
#include <iomanip>
#include <cstddef>
#include <cstring>
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<int>(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<const unsigned char*>(&student);
for (size_t i = 0; i < sizeof(Student); ++i) {
std::cout << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(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;
}