美文网首页
C语言马拉松_03.1

C语言马拉松_03.1

作者: Wolf_Tong | 来源:发表于2018-07-02 16:59 被阅读13次

    结构体 联合体 枚举类型

    结构体

    在实际场景中有很多对象是有很多属性的,因此要描述一个对象只靠一个字符串或者数字是不够的。为了可以更好的描述对象,C语言里出现了结构体。

    定义一个结构体:

    当需要描述一个学生的时候,他有着一些基本属性,例如:名字、性别、年龄、身高、体重等,我们依据这些属性定义一个结构体。

    struct Student{
        char name[16];
        bool sex;
        unsigned int age;
        unsigned int height;
        unsigned int weight;
        Student *next
    };
    

    以上就是我们定义的一个结构体的示例,需要注意:

    1. 定义结构体并不占用内存空间
    2. 定义结构体的元素时需要考虑属性的特点,例如年龄一定是正数,因此使用无符号型变量
    3. 结构体中的元素类型也可以是另外一个结构体,另外也可以是一个指向自己的指针元素

    声明一个结构体:

    struct Student stu;
    struct Student *pstu;
    

    声明结构体需要注意的是:

    1. 应以struct开头,有的编译器可能支持不加struct,但为了保证程序的健壮性通常要加上
    2. 声明结构体后,编译器便会为结构体开辟相应的内存空间

    结构体元素的访问:

    访问结构体的某个元素,使用'.'进行方位:

    stu.age = 32;
    

    结构体为指针类型时,使用'->'访问元素:

    stu->height = 180;
    

    需要注意的是:结构体不支持"=,+,-,*,/"等操作,但可以对地址进行"="操作,如下:

    pstu = &stu;
    

    tips

    为了增加程序的可读性,我们不希望在结构体声明前还要写上struct,事实上可以通过typedef关键字来实现这个功能:

    typedef struct _Student{
        char name[16];
        bool sex;
        unsigned int age;
        unsigned int height;
        unsigned int weight;
        Student *next
    }Student;
    

    通过typedef关键字声明后,结构体的声明便不需要添加struct

    Student stu;
    Student *pstu;
    

    思考一下

    通过查阅资料了解结构体在内存中的存储形式,使用格子图表示出来。

    相关文章

      网友评论

          本文标题:C语言马拉松_03.1

          本文链接:https://www.haomeiwen.com/subject/uhmluftx.html