13th day

2023-12-02 01:10
文章标签 day 13th

本文主要是介绍13th day,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

P291 课程介绍与知识点回顾

P292 指针与函数

 1. 指针作为函数的参数.

 2. 指针作为函数的返回值

 3.注意

P293 案例讲解

 4. 案例

 5. 申请在常量区的空间.不会被回收的.

P294 指向函数的指针

 1. 我们之前学习的指针.

 2. 程序在运行的时候. 会将程序加载到内存.

    优势: 调用函数有了两种方式.

 3. 指向函数的指针的声明

    1). 1个指针函数的指针.并不是任意的函数都可以指向.

    2). 声明语法

 4). 指向函数的指针的初始化.

 5).如何使用指针来间接的调用指针指向的函数呢?]

 6).小技巧.

P295 结构体概述

 1. 我们前面学习了很多种的数据类型

 2. 没有这种类型的变量怎么办?

P296 使用结构体创建新的数据类型

 3. 使用结构体来创建新的数据类型.

 4. 声明结构体类型的变量.

 5. 为啥要这么弄?

P297 搞清楚为什么要有结构体

P298 结构体变量的初始化

 6. 结构体变量的初始化.

 P299 什么时候我们自己要定义结构体

         7. 什么时候我们自己要定义结构体.

P300 使用结构体注意

 8. 使用结构体需要注意的几个小问题.

    1). 一定要先使用结构体定义新的类型.

    2). 结构体变量是1个变量.所以可以批量声明.

    3). 结构体的名称的的命名规范,要求每一个单词的首字母大写.

    4). 我们之前,是先声明结构体类型,再根据这个类型声明变量.

    5). 匿名结构体

P301 结构体变量的默认值和初始化

 1. 结构体变量的初始化.

 2. 结构体变量的成员的默认值.

P302 结构体类型的作用域

 3. 结构体类型的作用域

P303 结构体变量之间的相互赋值

 4. 结构体变量之间的相互赋值.

    1). 相同结构体类型的变量之间绝对是可以相互赋值的.

    2). 结构体变量之间的赋值原理

     3). 结构体变量之间赋值 是值传递.

P304 结构体数组

  1. 关于结构体你务必要掌握的内容.

  2. 结构体数组

 3. 结构体数组的初始化.

P305 结构体指针

         1. 结构体变量.是个变量.

 2. 结构体指针的声明

    1).格式:

    2). 初始化:

    3). 如何使用指向结构体变量的指针来间接的访问这个结构体变量呢?

P306 结构体嵌套

P307 结构体与函数

 1. 结构体作为函数的参数

 2. 结构体作为函数的返回值.

P308 枚举的简单使用

 1. 枚举

 2. C语言默认没有提供可以限定取值类型的变量.

 4. 声明枚举类型的变量.​

 5. 重点:

P309 枚举值所对应的整型的数

 6. 注意

    1). 枚举的作用域

    2). 每1个枚举值/枚举项 都有1个对应的整型的数.

P310 枚举的使用规范

  7. 使用枚举的一些规范.

P311 typedef类型定义

 1. typedef ----> type define  类型定义.

 2. 什么时候为已经存在的数据类型取1个别名呢?

P312 使用typedef将枚举类型和结构体类取1个短别名

 3. 使用typedef为结构体类型取别名.

    1). 先声明结构体类型.然 后在使用typedef为这个结构体类型取1个短别名.

    2). 声明结构体类型的同时,就使用typedef来为结构体类型取1个短别名.

    3). 声明匿名结构体的同时,就使用typedef来为结构体类型取1个短别名.(这是最常用的方式.)

 4. 使用typedef为枚举类型取1个短别名

    1). 先声明枚举类型,然后再使用typedef来为枚举类型取1个短别名.     

    2). 声明枚举类型的同时,就使用typedef来为枚举体类型取1个短别名

P313 学生系统演示

P314 程序架构


P291 课程介绍与知识点回顾

1.字符串的两种存储方式.
        1).使用字符数组来存储。
                char name[]="jack";
        2).使用字符指针存储
                char* name="jack";


2.他们的区别。
        1).存储的结构不同.
        2).可变与不可变。


3.字符串的恒定性。


4.fputs fgets【fopen,fclose】

5.字符串数组
1).字符的二维数组.
2).字符指针数组.


6.内存管理
        1 ).内存的五大区域
        2).堆.
        malloc calloc realloc free
        malloc(n);
        calloc(n,m)
        calloc(4,sizeof(int));
        realloc
        free

P292 指针与函数

 1. 指针作为函数的参数.

      1).效果

        在函数的内部可以通过这个参数指针去修改实参变量的值.

    2).当函数的返回值有多个的时候.

    3).地址传递.

    4).如果函数的参数是1个指针.函数希望传递给调用者1个信息.

       函数内部只会去取指针指向的变量的值而不会修改.

       那么这个时候 这个参数指针就是要const修饰.

 2. 指针作为函数的返回值

    1). 指针当然可以作为函数的返回值.

        但是.不能返回局部变量的地址.

        换句话说: 你返回的指针指向的变量一定要保证在函数结束之后,那个空间没有被回收还存在.

Address of stack memory associated with local variable 'arr' returned:

这句话翻译过来就是:2B 你拿了个局部变量来当返回值。这不是在搞笑吗?

堆栈地址与局部变量arr相关

Address of stack memory:堆栈内存地址

local variable:局部变量

associated with :与……有关系

    2). 如果你就是要返回1个指针,那么你就要保证这个指针指向的空间在函数结束以后仍然存在.

        那么这个时候,就可以将空间申请在堆区. 然后返回堆区的地址.

        一定要记得,调用者使用了完之后,记得free

 3.注意.

   1). 可以返回局部变量的值. 但是不能返回局部变量的地址.   2). 如果你非要返回指针,那么就应该把这个空间申请在堆区.

P293 案例讲解

 4. 案例:

    写1个函数. 传入1个 1-7的星期数,返回对应的英文星期天.

    void getWeekDay(int day);

    1). 如果返回值是字符串,那么返回值的类型就写char*

    2). 直接返回字符串常量.

#include <stdio.h>
#include <stdlib.h>
char* getWeekDay(int day){switch (day) {case 1:return "Monday";break;case 2:return "Tuesday";break;case 3:return "Wednesday";break;case 4:return "Thursday";break;case 5:return "Friday";break;case 6:return "Saturday";break;case 7:return "Sunday";break;}return NULL;
}
int main(int argc, const char * argv[]) {char* str = getWeekDay(4);printf("%s\n",str);return 0;
}

 方式二:

#include <stdio.h>
#include <stdlib.h>
char* getWeekDay(int day){char* weekDay = NULL;switch (day) {case 1:weekDay = "Monday";break;case 2:weekDay = "Tuesday";break;case 3:weekDay = "Wednesday";break;case 4:weekDay = "Thursday";break;case 5:weekDay = "Friday";break;case 6:weekDay = "Saturday";break;case 7:weekDay = "Sunday";break;}return weekDay;
}
int main(int argc, const char * argv[]) {char* str = getWeekDay(4);printf("%s\n",str);return 0;
}

 5. 申请在常量区的空间.不会被回收的.

    直到程序结束的时候才会回收.

    不能改:

    以字符指针存储在常量区的字符串数据不能改.

    其他存储在常量区的数据是可以改的.

P294 指向函数的指针

 1. 我们之前学习的指针.

    一般情况都是指向另外1个变量.

    int num = 10;

    int* p1 = &num;

    指针是指向内存中的1个字节空间的.

 2. 程序在运行的时候. 会将程序加载到内存.

    程序中主要有代码/指令.

    代码段中主要存储程序的代码.而程序的代码就包括函数.

    所以,函数肯定要存在内存的代码段中.

    既然函数要存储在内存中 那么肯定要用1块空间来存储.

    那么这个块空间一定有1个地址.n

    那么我们就可以声明1个指针,存储这个函数的地址.让这个指针指向这个函数.

    使用指针来间接的调用函数.

    优势: 调用函数有了两种方式.

    -> 直接使用函数名调用

    -> 使用指向函数的指针间接调用.

 3. 指向函数的指针的声明

    1). 1个指针函数的指针.并不是任意的函数都可以指向.

        而是有限定的.要求指向的函数的返回值类型和参数描述必须要与指针的描述一样.

    2). 声明语法

            返回值类型 (*指针名)([参数列表]);

        void (*pFunction)();

        表示声明了1个指向函数的指针,名字叫做pFunction.

        这个指针只能指向没有返回值,并且没有参数的函数.

        int (*pFun)(int num1,int num2);

        表示声明了1个指向函数的指针,名字叫做pFun.

        这个指针只能指向返回值为int类型 并且有两个整型的参数的函数.

 4). 指向函数的指针的初始化.

     1). 取到符合指针条件的函数的地址.

         函数的名称就代表函数的地址.

     2). 将地址赋值给指针变量.

        直接将符合条件的函数的名称赋值给这个指针.

void (*pFunc)() = test;

    3). 注意.

        函数名代表函数的地址.

        不要函数名加小括号.如果加了小括号,就代表执行这个函数 拿到这个函数的返回值.

 5).如何使用指针来间接的调用指针指向的函数呢?]

             void (*pFunc)() = test; //pFunc指针就指向了test函数

            pFunc();

           (*pFunc)();

     有参数就给, 有返回值就接.

 6).小技巧.

    如果要定义1个指针指向1个函数

    拷贝这个函数头.删除函数名 用小括号代替 里面写上* 加指针名称

P295 结构体概述

 1. 我们前面学习了很多种的数据类型

    int 

    double

    float

    char

    数组

    指针

    .....

    不同的数据类型的变量是用来保存不同类型的数据的.

    请声明1个变量,来保存1个人的年龄.

    0 200 整数.

    1个字节.

    unsigned char age = 18;

    int age = 10;

    保存1个人的身高.

    float height;

    int num;

    double avg;

    1个变量就来存储1个数据.描述这个数据.

    请声明1个变量,来保存1个学生信息.

    感觉无能为力.

    使用我们之前学习的任何1个变量,好像都不行.

    1个学生的信息:

    姓名 字符串

    年龄 int

    性别 字符串

    成绩 int

    1个学生的信息至少是上面的那几个数据联合起来描述的.

    如果我们要表示1个学生.就需要多个普通的变量和起来描述.

    学生信息:

    char *name;

    int age;

    char *gender;

    int score;

    要这四个变量合起来才能表示1个学生的信息.

    首先数组,然后打击了. 数组要求元素的类型一致.

    数组拜拜.

    就希望: 有一种数据类型. 我们声明这个个数据类型的变量. 这个变量就是由其他的几个普通的小变量组成的.

   这个变量是由其他的几个普通变量组合而成的.

    问题: 现在没有这种类型的变量.

    希望: 有一种数据类型.是由多个其他的普通变量联合成的.

          声明这个数据类型的变量.这个变量中就是有这些普通变合起来的.

 2. 没有这种类型的变量怎么办?

    那么我们就自己定义这样的数据类型.

    指定这个数据类型的变量由哪些小变量合成的.

    新类型NewType: int,int,char*,double;

    NewType type;

P296 使用结构体创建新的数据类型

 3. 使用结构体来创建新的数据类型.

    1). 如何使用结构体来创建新的数据类型呢?

        语法格式:

        struct 新类型名称

       {

            //在这里面写上,你创建的新类型是由哪些变量联合而成的.

            数据类型1 小变量名称1;

            数据类型2 小变量名称2;

            数据类型3 小变量名称3;

        };     

struct Student
{char *name;int age;int score;float height;
};

        代表我们新创建了1个数据类型.这个数据类型的名称叫做 struct Student

        这个新的类型是由 1个char* int int float的小变量联合而成的.

 4. 声明结构体类型的变量.

    1). 我们使用结构体仅仅是创建了1个新的类型而已,并没有变量.

        结构体的作用:是在指定新的数据类型是由哪些小变量组合而成的.

    2). 声明结构体类型的变量.

         语法格式:

       struct 新类型名称 变量名;

       struct Student stu;

        代表声明了1个 struct Student类型的变量.变量名字叫做stu

        这个时候, stu才是1个变量.才会在内存中申请空间.

        这个变量中,是由这个新的结构体类型规定的小变量组合而成的.

        这个结构体大变量是由结构体类型规定的小变量组合而成的.

    3). 结构体变量的类型:

        struct Student stu;

        这个时候stu结构结构体变量的类型是struct Student. 而不是Student

 5. 为啥要这么弄?

    因为我们要把学生的信息存储在内存中.

    而1个学生的信息是由多个变量联合在一起描述的.

    姓名

    年龄

    成绩

    身高

    1). 就声明4个变量嘛.不好. 不方便管理.

    2). 能不能有1个大变量. 这1个大变量中就有这4个小变量组成的.

        要声明这个类型的大变量.首先得有这样的数据类型.

        而C语言中并没有这样的类型. 但是C语言提供了一种机制,可以让我们自定义数据类型

        让我们自定义1个大变量是由哪些小变量合成的.;

        结构体.

    3). 如何使用结构体来定义1个新的数据类型.指定这个新的数据类型由哪些小变量而成的.

        strcut 新类型名称

        {   

           你想要这个新的类型由哪些小变量组成,就把这些小变量的类型和名称写在这里.

           相当于,就把哪些小变量声明在里面.

           数据类型1 小变量名1;

           数据类型2 小变量名2;

           .......

        };

P297 搞清楚为什么要有结构体

        定义1个变量,来保存1辆车的信息.

        char *品牌

        char *型号

        double 价格

        int 座位数量.

        char *颜色.

        使用结构体,来定义这个类型.

struct Car
{char *brand;char *model;double price;int seatNum;char *color;
};

        4). 结构体只是创建了1个新的数据类型.

        所以,你真的要保存1个信息的话,还要去声明这个类型的变量.

        struct Car bmw;

        结构体变量里面就是由结构体类型规定的小变量联合而成的.

P298 结构体变量的初始化

 6. 结构体变量的初始化.

    1). 意义: 为结构体变量中的小变量赋值.

    2). 初始化的语法:

        结构体变量名称.小变量名 = 数据;

        成员.      

        结构体变量名.成员名 = 数据;

 P299 什么时候我们自己要定义结构体

 7. 什么时候我们自己要定义结构体.

    当我们要保存1个数据.但是发现这个数据是1个大数据,因为这个数据是由其他的小数据联合起来组成的.

    那么这个时候 

    先使用结构体类自定义这个数据类型由哪些小变量合成的

    让后再根据这个结构体类型声明变量 来保存数据.]

    风扇

    重量

    颜色

    功率

    转速

    价格

P300 使用结构体注意

 8. 使用结构体需要注意的几个小问题.

    1). 一定要先使用结构体定义新的类型.

        然后才可以根据这个类型 声明这个类型的变量   

    2). 结构体变量是1个变量.所以可以批量声明.

struct Student xiaoHua,jim,meimei,lilei;

    3). 结构体的名称的的命名规范,要求每一个单词的首字母大写.

    4). 我们之前,是先声明结构体类型,再根据这个类型声明变量.

        实际上这两步 可以简化为1个步骤.

struct Computer
{char *cpuModel;int memSize;char *brand;
} iMac,lenvol,hp,dell;

        声明结构体类型的同时,声明结构体类型的变量.   

    5). 匿名结构体

        就是这个结构体类型没有名称.

         struct

         {

             char *barnd;

             char *color;

             int price;

         }fengshan1;

         a. 只能在声明结构体的同时就创建变量.

         b. 不能单独的声明这个结构体类型的变量.

P301 结构体变量的默认值和初始化

 1. 结构体变量的初始化.

     1). 先声明变量,再使用点1个1个的为成员赋值.

     2). 在声明结构体变量的同时,就为结构体变量的成员初始化. *******

struct Student xiaoHua = {"小花",17,89};

    3). 在声明结构体变量的同时,按顺序初始化部分成员

struct Student liLei = {"李雷"};

    4). 指定成员的初始化

struct Student jim = {.name = "吉姆",.age = 17, .score = 100};

 2. 结构体变量的成员的默认值.

    声明1个结构体变量,如果没有这个结构体变量的成员赋值.那么成员是有值 是垃圾值.

    只要在声明结构体变量的同时.只要初始化1个成员,其他的成员就会被自动的初始化为0.

P302 结构体类型的作用域

 3. 结构体类型的作用域

     如果结构体类型是定义在函数的内部的,那么这个结构体类型只能在这个函数的内部使用.

    如果我们希望这个结构体类型可以用在所有的函数中.

    那么就把这个结构体类型定义在函数的外面. 定义在最顶上.

    一般情况下,我们的结构体类型都是定义在函数的外面, 以让所有的函数来使用.

P303 结构体变量之间的相互赋值

 4. 结构体变量之间的相互赋值.

    1). 相同结构体类型的变量之间绝对是可以相互赋值的.

    2). 结构体变量之间的赋值原理

        将源结构体变量中的每一个成员的值 拷贝一份 赋值给 目标结构体变量中对应的成员.

     3). 结构体变量之间赋值 是值传递.

P304 结构体数组

  1. 关于结构体你务必要掌握的内容.

    1). 结构体的作用:

        可以让程序员新创建1个数据类型,指定这个新数据类型的变量是由哪些小变量联合而成的.

    2). 当我们要保存1个数据.这个数据是由多个其他的小数据联合而成的.

        人: 

        姓名  char*

        年龄  int

        身高  float

    3). 可以使用结构体来自己定义这个类型.

    4). 我们什么时候要使用结构体来新建1个数据类型.

  2. 结构体数组

     1).需要保存5个学生的信息.

         a. 声明5个结构体变量.来保存.分别来保存.

           这样虽然可以,但是数据非常难以管理.

         b. 使用结构体数组来保存他们.

    2). 声明1个结构体数组.

        struct 结构体类型名称 数组名称[数组长度];

struct Student students[5];

        表示我们声明了1个长度为5的数组 .

        数组名称叫做students

        数组长度为5个

        数组的元素的类型是struct Student类型.

        所以,这个数组可以存储5个struct Student类型变量.

 3. 结构体数组的初始化.

    1). 先声明结构体数组,然后用下标1个1个元素的赋值.

        注意: 当我们为结构体数组的元素赋值的时候.如果直接使用大括号来初始化.

             就必须要前面加1个小括号,来告诉编译器我们的给的数据类型.

 struct Student students[5];students[0] = (struct Student){"小明1",16,56};students[1] = (struct Student){"小明2",18,100};students[2] = (struct Student){"小明3",19,10};students[3] = (struct Student){"小明4",21,100};students[4] = (struct Student){"小明5",13,3};

    2). 在声明结构体数组的同时,就为所有的元素初始化.

 struct Student students[5] ={{"小明1",16,56},{"小明2",18,100},{"小明3",19,10},{"小明4",21,100},{"小明5",13,3}};

 3. 结构体数组的长度计算.

    1). 先使用sizeof计算出数组占用的总的字节数.

    2). 使用总字节数 除以 每1个元素占用的字节数.

int len =   sizeof(students) / sizeof(struct Student);

P305 结构体指针

 1. 结构体变量.是个变量.

struct Student xiaoMing = {"小明",18,100};

    xiaoMing首先是1个变量.类型是struct Student类型的.

    既然xiaoMing是1个变量.那么这个变量肯定就是有地址的.既然有地址,那么就可以声明1个指针指向这个结构体变量.

 2. 结构体指针的声明

    1).格式:

        struct 结构体类型名称* 指针名;

struct Student* pStu;

        声明了1个pStu指针变量.这个指针变量的类型是struct Student*.

        这个指针就只能指向struct Student类型的变量.

    2). 初始化:

        a. 取出结构体变量的地址.

           使用取地址运算符 & 

           就可以取出结构体变量的地址.

        b. 将地址赋值给指针变量.
 

struct Student xiaoMing = {"小明",18,100};
struct Student* pStu =  &xiaoMing;

    3). 如何使用指向结构体变量的指针来间接的访问这个结构体变量呢?

        a. (*结构体指针名).成员.        

 (*pStu).age = 18;

        b. 使用箭头 -> 来访问.

pStu->age = 19;  //代表把19赋值给pStu指针指向的变量的age成员.

        代表把19赋值给pStu指针指向的变量的age成员.

P306 结构体嵌套

 用1个变量来保存1个人.

 姓名

 年龄

 出生日期

 家产

 日期:

 年 int

 月 int

 日 int

/***  这个结构体类型表示1个日期:*  组成1个日期数据的有:年 月 天*/
struct Date
{int year;int month;int day;
};/***  表示个人*  组成1个人的数据*  姓名 char**  年龄 int*  家产 double*  出生日期. struct Date*/
struct Person
{char* name;int age;double money;//出生日期.struct Date birthday;
};

 什么时候会有这种情况

当我们在为结构体定义成员的时候. 发现某个成员也是1个大数据 需要其他的几个小变量合起来描述

 那么这个时候你就可以再定义1个数据类型.来表示这个类型.

 电脑

 CPU

 硬盘

 内存

struct CPU
{char *brand;char *model;int price;double pinLv;
};struct Computer
{//1. CPUstruct CPU cpu;//2. 硬盘//......
};

P307 结构体与函数

 1. 结构体作为函数的参数

     1). 结构体是我们自定义的一种数据类型,也是一种数据类型 所以当然可以作为函数的参数.

     2). 结构体作为参数传值 是 值传递.

     3). 如果你就是希望函数的内部可以修改实参结构体变量的值,那么就是要指针.

 2. 结构体作为函数的返回值.

     1). 结构体类型完全可以作为函数的返回值.

     2). 在返回的时候 直接将这个结构体变量的值返回即可.

     3). 如果你要返回结构体变量的地址.那么就要把这个结构体变量创建在堆区.

P308 枚举的简单使用

 1. 枚举

    1).请声明1个变量来保存1个人的性别.

               char gender = 'a'; //男  女

    2).请声明1个变量来保存1个人学历

              char *xueLi = "烈士"; //

    3).定义1个变量.来保存1个方向.

               char *dir = "滚蛋".

    某些变量的取值,是限定的. 变量的取值只能是指定的几个值当中的任意1个,除此之外其他不行.

    新的需求:  变量的取值只能是指定的几个值当中的任意1个.除此之外其他不行.

 2. C语言默认没有提供可以限定取值类型的变量.

    那么我们就自己定义具备限定取值的类型.

    枚举就能做这个事情.

    作用: 支持程序员新创建1种数据类型.这个数据类型的变量的取值被限定.

    比如: 使用结构体创建1个新的类型.指定这个类型的变量只能存储 东南西北 中的任意1个值 除此之外其他不行.

 3. 如何使用枚举创建1个新的数据类型 来达到限定变量的取值.;

    语法格式:

    enum 新类型名称

    {

       限定取值1,限定取值2,限定取值3,......

    };

    enum Direction{East,South,West,North};

    表示新创建了1个数据类型 这个数据类型的名称叫做. enum Direction

    可以声明这个类型的变量.这个变量中就只能存储这其中指定的任意1个.

 4. 声明枚举类型的变量.

    1). 语法格式:

       enum 枚举类型名称 变量名;

enum Direction dir;

        表示.声明了1个变量.变量的名字叫做dir 变量的类型叫做 enum Direction

       这个变量的特点:只能存储这个枚举类型限定的取值之一.

    2). 枚举变量的初始化.

        只能为这个枚举变量赋 枚举类型 限定的 取值之一.

    enum Direction{East,South,West,North};enum Direction dir = East ;

 5. 重点:

    什么时候自己要定义枚举?

    如果你有1个变量的取值.只能是取指定几个中的1个. 别的不能取,

    那么这个时候,就可以使用枚举.

    QQ: 状态. 在线 离线 隐身 忙碌 离开 Q我吧

P309 枚举值所对应的整型的数

 6. 注意

    1). 枚举的作用域

       如果将枚举类型定义在函数的内部.那么这个类型就只能在这个函数的内部使用

        如果你希望将这个枚举的类型给所有的函数使用,那么就将这个枚举类型定义在函数的外面.

        最顶部.

    2). 每1个枚举值/枚举项 都有1个对应的整型的数.

        默认从0开始,依次的递增.

        无论是什么类型的枚举变量.都是占据4个字节.

        枚举变量中真正存储的是 枚举值所对应的整型的数.

        所以,我们才可以使用%d输出枚举变量中的值.

        如果你就要打印枚举值 你就只有自己写判断.

        所以,我们也可以直接为枚举变量赋值1个整型的数据.

        这样意义.

        虽然我们可以给1个整数,但是我们并不会这么做. 因为给整数的话 代码的可读性就会很差.

        给枚举值.可读性就会变的很高.

        默认情况下.每1个枚举值对应的整型的数从0开始 依次递增.

        但是我们还可以手动的指定每1个枚举值代表的整型的数. 

  

P310 枚举的使用规范

  7. 使用枚举的一些规范.

     枚举类型的名称命名规范: 首字母大写.每1个单词的首字母大写.

     枚举值的命名规范: 枚举值的名称都以枚举类型来开头.

P311 typedef类型定义

 1. typedef ----> type define  类型定义.

    作用: 为一个已经存在的数据类型取1个别名.

         如果我们想要使用这个类型,直接使用这个别名就可以了.

    语法格式:

    typedef 已经存在的数据类型 别名;

    typedef int itheima;  为int数据类型取了1个别名,叫做itheima

    如果我们要使用int类型. 就可以直接使用itheima

    这个时候 itheima 完全等价于 int 

    因为itheima是int的1个别名.

typedef char* string;

    将char* 类型取1个别名.叫做string

    所以,就可以使用string代替char*

     size_t  其实就是 unsigned long

 2. 什么时候为已经存在的数据类型取1个别名呢?

     当数据类型很长的时候, 就可以为这个数据类型取1个短1点的别名.

    这样用起来就很方便.

P312 使用typedef将枚举类型和结构体类取1个短别名

 3. 使用typedef为结构体类型取别名.

    1). 先声明结构体类型.然 后在使用typedef为这个结构体类型取1个短别名.

struct Student
{char *name;int age;int score;
};typedef struct Student Student;

    2). 声明结构体类型的同时,就使用typedef来为结构体类型取1个短别名.

typedef struct Student
{char *name;int age;int score;
} Student;

    3). 声明匿名结构体的同时,就使用typedef来为结构体类型取1个短别名.(这是最常用的方式.)

typedef struct
{char *name;int age;int score;
} Student;

 4. 使用typedef为枚举类型取1个短别名

    1). 先声明枚举类型,然后再使用typedef来为枚举类型取1个短别名.     

enum Direction
{DirectionEast,DirectionSouth,DirectionWest,DirectionNorth
};typedef enum Direction Direction;

    2). 声明枚举类型的同时,就使用typedef来为枚举体类型取1个短别名

type enum Direction
{DirectionEast,DirectionSouth,DirectionWest,DirectionNorth
} Direction ;

    3). 使用上面这种方式的时候,枚举的名称就没有必要写了.

type enum
{DirectionEast,DirectionSouth,DirectionWest,DirectionNorth
} Direction ;

P313 学生系统演示

无板书笔记

P314 程序架构

  1. 要处理学生信息.

     而1个学生信息是由:     编号.    姓名     年龄     性别     成绩     组合而成的.

     毫无疑问.应该自定义1个结构体类型来保存1个学生的数据.

     发现性别, 最好是用枚举. 所以我们定义了1个枚举来表示性别.

 2. 程序默认有10个学生的信息.

    那就使用1个长度为10的结构体数组来存储就可以了.

    这个数组中就是存储这10个学生的信息.

    很明显.这个数组中存储的学生的信息 是需要被多个函数访问的.

    所以,我们把这个数组定义为全局的.

    这个时候.我们的数据源,我们就准备好了.

 3. 业务流程    

    while(1)

    {

    1). 显示操作菜单.并接收用户的选择.

        2). 判断用户的选择.根据用户的选择来做不同的事情.

    }

这篇关于13th day的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/443392

相关文章

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

Linux基础入门 --9 DAY

文本处理工具之神vim         vi和vim简介 一、vi编辑器 vi是Unix及类Unix系统(如Linux)下最基本的文本编辑器,全称为“visual interface”,即视觉界面。尽管其名称中包含“visual”,但vi编辑器实际上工作在字符模式下,并不提供图形界面。vi编辑器以其强大的功能和灵活性著称,是Linux系统中不可或缺的工具之一。 vi编辑器具有三种主要的工作模

day-50 求出最长好子序列 I

思路 二维dp,dp[i][h]表示nums[i] 结尾,且有不超过 h 个下标满足条件的最长好子序列的长度(0<=h<=k),二维数组dp初始值全为1 解题过程 状态转换方程: 1.nums[i]==nums[j],dp[i,h]=Math.max(dp[i,h],dp[j,h]+1) 2.nums[i]!=nums[j],dp[i,h]=Math.max(dp[i,h],dp[j,h-1

[Day 73] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

AI在健康管理中的應用實例 1. 引言 隨著健康管理需求的提升,人工智能(AI)在該領域的應用越來越普遍。AI可以幫助醫療機構提升效率、精準診斷疾病、個性化治療方案,以及進行健康數據分析,從而改善病患的健康狀況。這篇文章將探討AI如何應用於健康管理,並通過具體代碼示例說明其技術實現。 2. AI在健康管理中的主要應用場景 個性化健康建議:通過分析用戶的健康數據,如飲食、運動、睡眠等,AI可

Vue day-03

目录 Vue常用特性 一.响应更新 1. 1 v-for更新监测 1.2 v-for就地更新 1.3 什么是虚拟DOM 1.4 diff算法更新虚拟DOM 总结:key值的作用和注意点: 二.过滤器 2.1 vue过滤器-定义使用 2.2 vue过滤器-传参和多过滤器 三. 计算属性(computed) 3.1 计算属性-定义使用 3.2 计算属性-缓存 3.3 计算属

用Python实现时间序列模型实战——Day 14: 向量自回归模型 (VAR) 与向量误差修正模型 (VECM)

一、学习内容 1. 向量自回归模型 (VAR) 的基本概念与应用 向量自回归模型 (VAR) 是多元时间序列分析中的一种模型,用于捕捉多个变量之间的相互依赖关系。与单变量自回归模型不同,VAR 模型将多个时间序列作为向量输入,同时对这些变量进行回归分析。 VAR 模型的一般形式为: 其中: ​ 是时间  的变量向量。 是常数向量。​ 是每个时间滞后的回归系数矩阵。​ 是误差项向量,假

Linux基础入门 --8 DAY

文件权限管理 设置文件的所有者chown         格式: chown [OPTION]... [OWNER][:[GROUP]] FILE... chown [OPTION]... --reference=RFILE FILE...         示例:  chown admin(所有者):admin(所属组)f1.txt chown admin(所有者).admin(

[Day 72] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

區塊鏈在跨境支付中的應用 跨境支付一直是全球經濟中極具挑戰的領域。傳統的跨境支付系統通常需要數天時間來處理交易,涉及的中間機構多且手續費昂貴。然而,區塊鏈技術的出現為解決這些問題提供了一條嶄新的途徑。本文將探討區塊鏈在跨境支付中的應用,並通過代碼示例展示如何使用區塊鏈技術來優化跨境支付流程。 1. 區塊鏈在跨境支付中的優勢 區塊鏈技術具有去中心化、透明、高效和安全等特性,使其在跨境支付領域具

代码随想录Day 36|滑铁卢了,leetcode题目:1049.最后一块石头的重量、494.目标和、474.一和零

提示:DDU,供自己复习使用。欢迎大家前来讨论~ 文章目录 动态规划一、题目题目一:1049.最后一块石头的重量II解题思路: 题目二:494.目标和动态规划 (二维dp数组)#动态规划 (一维dp数组) 题目三: 474.一和零解题思路: 总结 动态规划 有点难了,之前差的有点多,找时间补 一、题目 题目一:1049.最后一块石头的重量II leetcode题目链接

嵌入式软件--51单片机 DAY 4

一、蜂鸣器 当电流通过线圈时会产生电磁场,电磁场与永磁体相互作用,从而使金属膜产生震动而发声。为使金属膜持续震动,蜂鸣器需要使用震荡电路进行驱动。有些蜂鸣器元件内部自带震荡驱动电路,这种蜂鸣器叫做有源蜂鸣器(Active Buzzer,自激式蜂鸣器);而有些则不带震荡驱动电路,这种蜂鸣器叫做无源蜂鸣器(Passive Buzzer,它激式蜂鸣器)。 1.原理图 2.软件实现 Int_B