C语言第六节 结构体

1、结构体定义

  • 结构体 也是一种构造数据类型,之前我们还学过的构造数据类型还有 枚举和数组;

  • 结构体和数组很像,都是聚合变量,都可以存放一组数据,但是数组只能存放相同数据类型的数据,而结构体可以存放不同数据类型的数据,并且数组中数据称为 元素,结构体中数据称为 成员。

  • 结构体的定义:

  • struct 结构体名 {

        类型说明符 成员名;

        ......

        };

2、定义结构体的关键struct

三种定义形式:

   1> 先定义结构体类型,再定义结构体变量;

    struct student{

        int number; //学号

        char name[20]; //姓名

        char gender; //性别

        int age; //年龄

        float score; //成绩

    };

    struct student stu = {"laowang", 'm', 25, 59.5};

    //变量名是 stu ;类型名是 struct student 

 

   2> 在定义结构体类型时,直接声明结构体变量;

    struct teacher{

        int number; //工号

        char name[20]; //姓名

        char gender; //性别

        int age; //年龄

        char position[20]; //职务

        float salary; //薪水

    }iOSTeacher = {12001, "chenqingyuan", 28, 'm', "jiangshi", 100};

    

   3> 匿名结构体,省略结构体名称,并且在定义结构体时,声明结构体变量;

    struct {

        char brand[20]; //品牌

        float price; //价格

        float volumn; //容量

        float weight; //重量

    }cup = {"fuguang", 10.0, 500, 100};

    */

 

3、typedef重定义

  • 关键字typedef

     typedef <#type#> <#name#>

  • type是原有类型, name是新类型;

 

4、访问结构体成员

  • 访问结构体成员使用 ‘.’ 操作符,可以认为 ‘.’ 就是 “的” 的意思;

  • 如果想要修改字符串(姓名、品牌、类型等等)不能直接赋值,需要使用字符串的拷贝函数 strcpy;

 

5、结构体内存占用

1> 先确定最大成员所占用的字节大小。以此为单位依次分配内存

2> 每一个成员相对于首地址的偏移量,必须能不当前成员所占字节大小整除

3> 结构体占用内存必须是最大成员所占字节的整数倍

 

6、结构体嵌套

既结构体中的成员也是结构体。

 

7、结构体数组

数组不能赋值,但是结构体可以直接赋值,所以我们可以将数组放到结构体中当作成员,来间接完成赋值。

 

posted @ 2016-02-24 14:15  衡于虑hyl  阅读(124)  评论(0编辑  收藏  举报