// 结构体，也是构造类型之一，由至少一个基本数据类型或构造类型组成的一种数据类型
// 结构体的成员可以是基本数据类型或构造类型
#include <stdio.h>
#include <string.h>

/* 
    // 语法1: 只声明结构体
    struct 结构体类型的名称
    {
        // 声明成员变量，成员变量不要初始化（值）
        成员类型1 成员名称1;
        成员类型2 成员名称2;
        ... 成员类型n 成员名称n;
    };

    // 语法2: 声明结构体时，同时声明结构体类型的变量
    struct 结构体类型的名称
    {
        // 声明成员变量，成员变量不要初始化（值）
        成员类型1 成员名称1;
        成员类型2 成员名称2;
        ... 成员类型n 成员名称n;
    } 结构体类型的变量1, 结构体类型的变量2, ... 结构体类型的变量n;

    // 语法3: 一次性声明结构体
    struct
    {
        // 声明成员变量

    } 变量名;
*/

struct STU
{
    unsigned int sid; // 存放学号
    char name[32];    // 存放姓名
    char phone[12];   // 存放手机号，12个字节，11个数字，最后一个字节存放'\0'
};

#define sstu struct STU // 定义别名

int main()
{
    // 定义 STU 类型的变量，存放张三这个学生，学号为1001，手机号为17791692095
    // 结构体变量在初始化时，按成员的顺序和数据类型依次赋值
    sstu s1 = {1001, "张三", "17791692095"};
    sstu s3 = {1003, "王五", "17791692097"};
    // 存其他学生的信息
    struct STU s2;
    s2.sid = 1002;
    strcpy(s2.name, "李四");
    strcpy(s2.phone, "17791692096");

    printf("sid: %u name: %s phone: %s\n", s1.sid, s1.name, s1.phone);
    printf("sid: %u name: %s phone: %s\n", s2.sid, s2.name, s2.phone);
    printf("sid: %u name: %s phone: %s\n", s3.sid, s3.name, s3.phone);

    return 0;
}