#include <stdio.h>
#include <string.h>

/* Demo 05：结构体、共用体与枚举 */

typedef struct
{
    int id;
    char name[20];
    float score;
} Student;

void addScore(Student *s, float delta)
{
    s->score += delta;   // 指针访问成员用 ->
}

enum Color { RED = 1, GREEN = 5, BLUE };

int main()
{
    // 结构体
    Student stu = {1, "张三", 88.0};
    printf("%d %s %.1f\n", stu.id, stu.name, stu.score);

    addScore(&stu, 7.5);
    printf("加分后：%.1f\n", stu.score);   // 95.5

    Student *p = &stu;
    printf("指针访问：%s -> %.1f\n", p->name, p->score);

    // 结构体数组：找最高分
    Student class[] = {{1, "张三", 90.0}, {2, "李四", 95.5}, {3, "王五", 78.0}};
    Student *top = &class[0];
    for (int i = 1; i < 3; i++)
        if (class[i].score > top->score)
            top = &class[i];
    printf("最高分：%s %.1f\n", top->name, top->score);

    // 共用体：同一时刻只有一个成员有效
    union Data
    {
        int i;
        char bytes[4];
    } d;
    d.i = 0x41424344;   // 'D''C''B''A'（小端序）
    printf("union 低字节 = %c\n", d.bytes[0]);           // D
    printf("union 大小 = %zu\n", sizeof(union Data));    // 4

    // 枚举
    enum Color c = GREEN;
    printf("GREEN = %d\n", c);   // 5

    return 0;
}
