黑马程序员------C语言-----结构体和枚举

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


一:结构体

结构体:由一系列具有相同类型或不同类型的数据构成的数据集合

 数组:只能由多个相同类型的数据构成
 结构体:可以由多个不同类型的数据构成
1>.定义结构体类型

    struct Person
    {
        // 里面的3个变量,可以称为是结构体的成员或者属性
        int age;        // 年龄
        double height;  // 身高
        char *name;    //  姓名
    };


2>.根据结构体类型,定义结构体变量

    struct Person p = {32, 1.75, "Colin"};
    p.age = 30;
    p.name = "rose";
    printf("age=%d, name=%s, height=%f\n", p.age, p.name, p.height);
//错误写法
//    struct Person p2;
//   p2 = {30, 1.67, "jack"};



结构体内存分析
结构体所占用的存储空间 必须是 最大成员字数的倍数 ----->补齐算法(对齐算法)


定义结构体变量的3种方式
 1>先定义类型,再定义变量(分开定义)

 struct Student
 {
     int age;
 };
 struct Student stu;

 2>定义类型的同时定义变量


 struct Student
 {
     int age;
 } stu;
 struct Student stu2;

 3>定义类型的同时定义变量(省略了类型名称)


 struct
 {
     int age;
 } stu;


结构体数组 :
 能存放3个结构体变量,每个结构体变量占16个字节


    struct RankRecord records[3] =
    {
        {1, "jack", 5000},
        {2, "jim", 500},
        {3, "jake", 300}
    };
//错误写法 records[0] = {4, "rose", 9000};


结构体与指针
 1.指向结构体的指针的定义

 struct Student *p;

 2.利用指针访问结构体的成员
 1> (*p).成员名称
 2> p->成员名称


int main()
{
    struct Student
    {
        int no;
        int age;
    };
    // 结构体变量
    struct Student stu = {1, 20};
    // 指针变量p将来指向struct Student类型的数据
    struct Student *p;
    // 指针变量p指向了stu变量
    p = &stu;
    p->age = 30;
    // 第一种方式
    printf("age=%d, no=%d\n", stu.age, stu.no);
    // 第二种方式
    printf("age=%d, no=%d\n", (*p).age, (*p).no);
    // 第三张方式
    printf("age=%d, no=%d\n", p->age, p->no);
    return 0;
}


结构体的嵌套


int main()
{
    struct Date
    {
        int year;
        int month;
        int day;
    };
    
    // 类型
    struct Student
    {
        int no;   // 学号
        struct Date birthday;   // 生日
        struct Date ruxueDate;  // 入学日期
        // 这种写法是错误的
        // struct Student stu;
    };
    struct Student stu = {1, {2000, 9, 10}, {2012, 9, 10}};
    printf("year=%d,month=%d,day=%d\n", stu.birthday.year, stu.birthday.month, stu.birthday.day);
    return 0;
}


二.枚举

定义:将变量的值一一列出来,变量的值只限于列举出来的值的范围内


int main()
{
    enum Sex{ Man, Woman, Unknow};
    // 0男  1女  -1不详
    // int sex = -1;
    enum Sex s = Unknow;
    // 1.定义枚举类型
    enum Season
    {
        spring,
        summer,
        autumn,
        winter
    };
    
    // 2.定义枚举类型
    enum Season s1 = winter;
    
    printf("%d\n", s1);
    
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值