A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小龙女的萝卜 中级黑马   /  2015-5-30 17:29  /  743 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

结构体
* 可以有不同类型的数据组成
* 先定义结构体类型,在利用类型定义变量
1. 定义结构体
        1> 定义结构体类型
                    struct Person
                    {   里面的3个变量,可以称为是结构体的成员或者属性
                int age; // 年龄
                double height; // 身高
                char *name; // 姓名
                    };
        2> 根据结构体类型,定义结构体变量
                    struct Person p = {20, 1.55, "jack"};
                    p.age = 30;
                p.name = "rose";
                        错误写法:
                        struct Person p2;
                p2 = {30, 1.67, "jake"};
2. 定义结构体变量的3种方式
        1> 先定义类型,再定义变量(分开定义)
        struct Student
        {
                    int age;
        };
        struct Student stu;
2> 定义类型的同时定义变量
        struct Student
        {
                    int age;
        } stu;
        struct Student stu2;
  3> 定义类型的同时定义变量(省略了类型名称)
        struct
        {
                    int age;
        } stu;
        注意:结构体类型不能重复定义
3. 结构体类型的作用域
1> 定义在函数外面:全局有效(从定义类型的那行开始,一直到文件结尾)
2> 定义在函数(代码块)内部:局部有效(从定义类型的那行开始,一直到代码块结束
4. 结构体数组
  1> 先定义类型
        struct RankRecord
            {
        int no; // 序号  4
        int score; // 积分 4
        char *name; // 名称 8
            };
  2> 定义结构体数组
        struct RankRecord records[3] =
            {
        {1, "jack", 5000},
        {2, "jim", 500},
        {3, "jake",300}
              };
     
        访问更改数组元素
        records[0].no = 4;
        records[0] = {4, "rose", 9000};  错误写法
* 遍历
        for (int i = 0; i<3; i++)
            {
        printf("%d\t%s\t%d\n", records[i].no, records[i].name, records[i].score);
            }
5. 指向结构体的指针
  1> 定义
        struct Student *p;
  2> 利用指针访问结构体的成员
        *  (*p).成员名称
        *  p->成员名称
例:
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);
6. 结构体的嵌套
  1> 定义类型
        struct Date
            {
        int year;
        int month;
        int day;
            };
            // 类型
            struct Student
            {
        int no; // 学号
        struct Date birthday; // 生日
        struct Date ruxueDate; // 入学日期
        // 这种写法是错误的
        //struct Student stu;
};
2> 定义变量
    struct Student stu = {1, {2000, 9, 10}, {2012, 9, 10}};

2 个回复

倒序浏览
围观学习啦,加油
回复 使用道具 举报
这是829 发表于 2015-5-31 01:07
围观学习啦,加油

你是第十期吗?好多人啊 ,一起加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马