From f939cd26f5affe7af03bc9b816bd43079284944f Mon Sep 17 00:00:00 2001 From: MayorovAY Date: Fri, 12 Dec 2025 17:42:30 +0300 Subject: [PATCH] =?UTF-8?q?=D1=87=D0=B0=D1=81=D1=82=D1=8C=202=20+=20=D1=87?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D1=8C=203?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 59 insertions(+), 4 deletions(-) diff --git a/main.cpp b/main.cpp index e220f6e..8e4646a 100644 --- a/main.cpp +++ b/main.cpp @@ -3,10 +3,19 @@ #include #include #include -#include +#include #include using namespace std; +struct Student { + char name[17]; // имя + '\0' + uint16_t year; // год поступления (2 байта) + float gpa; // средний балл + unsigned gender : 1; // 1 бит: 0 — жен, 1 — муж + unsigned courses; // количество курсов (обычное целое) + struct Student* headman; // указатель на старосту +}; + char nibble_to_hex(uint8_t i){ assert(0x0 <= i && i <= 0xf); switch (i) { @@ -73,10 +82,56 @@ void print_in_binary(const void* data, size_t size) { } int main() { - uint8_t u8 = 42; - uint16_t u16 = 1025; - uint32_t u32 = 1025; + struct Student group[3] = { + { "Ivanov", 2023, 4.5f, 1, 10, NULL }, // [0] староста + { "Petrova", 2023, 4.2f, 0, 8, &group[0] }, // [1] + { "Sidorov", 2023, 3.9f, 1, 6, &group[0] } // [2] + }; + + /* 1) Адрес и размер массива */ + printf("group address = %p, sizeof(group) = %zu\n", + (void*)group, sizeof(group)); + + /* 2) Адреса и размеры элементов массива */ + for (int i = 0; i < 3; ++i) { + printf("group[%d]: address = %p, sizeof = %zu\n", + i, (void*)&group[i], sizeof group[i]); + } + + /* 3) Информация по полям (пример для group[1], не староста) */ + struct Student *s = &group[1]; + printf("\nField name: addr=%p, offset=%zu, size=%zu\n", + (void*)&s->name, offsetof(struct Student, name), + sizeof s->name); + + printf("Field year: addr=%p, offset=%zu, size=%zu\n", + (void*)&s->year, offsetof(struct Student, year), + sizeof s->year); + + printf("Field gpa: addr=%p, offset=%zu, size=%zu\n", + (void*)&s->gpa, offsetof(struct Student, gpa), + sizeof s->gpa); + + printf("Field courses: addr=%p, offset=%zu, size=%zu\n", + (void*)&s->courses, offsetof(struct Student, courses), + sizeof s->courses); + printf("Field headman: addr=%p, offset=%zu, size=%zu\n", + (void*)&s->headman, offsetof(struct Student, headman), + sizeof s->headman); + printf("Field name hex:\n"); + print_in_hex(&group[1], sizeof group[1]); + printf("\nField year hex: "); + print_in_hex(&s->year, sizeof s->year); + printf("\nField gpa hex: "); + print_in_hex(&s->gpa, sizeof s->gpa); + printf("Field name bin:\n"); + print_in_binary(&group[1], sizeof group[1]); + printf("Field year bin: "); + print_in_binary(&s->year, sizeof s->year); + printf("Field gpa bin: "); + print_in_binary(&s->gpa, sizeof s->gpa); + cout<