结构体与枚举

刚百度了一下,虽然网上有不少优秀的博客详细的介绍告终构体的使用用注意事项。看了别人的,一度让我不想在写本身的博客了。网上都有那么好的了,我为何还要画蛇添足呢。html

可是转念一想,别人写的毕竟是别人写的,那是别人的,虽然我能看懂,也能为我所用,但始终不是从本身脑子里一点点想出来的,不是本身手指在键盘上一个字一个字的敲出来的。编程

因此尽管本身都知道了,可是仍是本身写出来,总结出来,才算真正本身的东西。数组

好了,下面来聊一下结构体是什么吧。spa

一、首先它是一个体。.net

既然是一个体,里面确定有不少互相做用的小模块。就是这样,结构体里能够定义不少不一样数据类型的模块,字符串,数组,指针,整型,浮点数等等。指针

定义告终构体,咱们就能够定义结构体变量,用开引用结构体中的小模块。典型的例子就是学生信息管理系统。code

关于结构体的定义呢,咱们仍是采用经常使用的方式,用typedef来定义结构体,方便后面定义结构体变量。必定要养成良好的习惯啊。htm

typedef struct Man//定义了一个结构体Man
{
    int age;
    int score;
}man;//结构体变量man

int main()
{
    man man1 = {20,80};//对模块的引用
    man man2 = {30,70};
    man man3 = {40,99};
    printf("%d\n",man1.age);
    printf("%d\n",man3.score);
}

 

二、结构体中的“洞”blog

结构体中的每个模块在内存中并非禁止排列存储的,而是上下对齐存储。这种现象叫作内存对齐。这样作的目的是为了是处理器可以更快速的进行寻址,执行速度更快。以空间换取时间。内存

看来鱼与熊掌仍是不能兼得啊。既然是上下对齐的,那么并非每一个模块都能准确的填满一行的内存空间。那么没有被填满的内存空间就形成了空洞。

这样的话,在查看结构体所占的空间时,就不能把每一个模块所分别占的内存空间简单的相加。由于他们中间存在空洞。

 

三、在c语言中文网里面对结构体进行了详细的讲解:http://c.biancheng.net/cpp/html/93.html

包括结构体数组,结构体指针。

 

四、枚举

在实际编程中,有些数据的取值每每是有限的,只能是很是少许的整数,而且最好为每一个值都取一个名字,以方便在后续代码中使用,

好比一个星期只有七天,一年只有十二个月,一个班每周有六门课程等。这种状况下,使用枚举颇有用的。

#include <stdio.h>
int main()
{
    enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };//第一个赋值后,后面每个一次+1  
    enum week day;//也能够直接在上面大括号后面加 day  
    
    scanf("%d", &day);
    
    switch(day)
    {
        case 1: puts("Monday"); break;
        case 2: puts("Tuesday"); break;
        case 3: puts("Wednesday"); break;
        case 4: puts("Thursday"); break;
        case 5: puts("Friday"); break;
        case 6: puts("Saturday"); break;
        case 7: puts("Sunday"); break;
        default: puts("Error!");
    }
    return 0;
}
相关文章
相关标签/搜索