struct 结构体名 {
数据类型 成员1;
数据类型 成员2;
// 可以嵌套结构体
struct 子结构体名 子成员;
};
struct Student {
int num; // 学号
char name[20]; // 姓名
float score; // 成绩
};
先声明类型,后定义变量
struct Student stu1, stu2;
声明类型时直接定义变量
struct Student {
int num;
char name[20];
} stu1, stu2;
匿名结构体(无法重复使用)
struct {
int num;
char name[20];
} stu1, stu2;
struct Student stu1 = {101, "张三", 90.5};
struct Date {
int year;
int month;
};
struct Student {
int num;
struct Date birthday; // 嵌套结构体
};
struct Student stu2 = {102, {2000, 9}};
struct Score {
float math;
float english;
};
struct Student stu3 = {103, {85.5, 92.0}};
struct Student stu_arr[3] = {
{101, "张三", 90.5},
{102, "李四", 88.0},
{103, "王五", 95.5}
};
printf("姓名:%s,成绩:%.1f\n", stu_arr[0].name, stu_arr[0].score);
struct Student stu = {101, "张三", 90.5};
struct Student *p = &stu;
printf("学号:%d\n", (*p).num); // 方式1
printf("姓名:%s\n", p->name); // 方式2(更常用)
void print_student(struct Student *p) {
printf("学号:%d,姓名:%s\n", p->num, p->name);
}
union Data {
int num;
char ch;
float f;
};
union Data data;
data.num = 10; // 存入整数
data.ch = 'A'; // 存入字符(覆盖之前的数值)
enum Week {Sun, Mon, Tue, Wed, Thu, Fri, Sat};
enum Week today = Mon;
if (today == Mon) {
printf("今天是周一\n");
}
enum Color {Red=1, Green=2, Blue=4};
typedef struct Student {
int num;
char name[20];
} Stu;
Stu stu1 = {101, "张三"};
->
访问成员。练习题:定义一个包含学生姓名、3门成绩的结构体,计算平均分并输出。