day12:
一:全局变量与局部变量。
1 局部变量:定义在函数内部以及函数的形参称为局部变量。作用域:从定义的哪一行开始直到其所在的代码块结束为止。
生命周期:从程序运行到定义哪一行开始分配内存空间到程序离开该变量所在的作用域。定义格式: 变量类型 变量名称;
特点:①相同作用域内不可以定义同名变量。②不同作用范围可以定义同名变量,内部作用域的便来给你会覆盖外部作用域的变量。
2 全局变量:定义在函数外部的变量。 定义格式: 变量类型 变量名称=值; 声明格式:变量类型 变量名称;
特点:①不可以重复定义,可以重复声明。②局部变量可以与全局变量同名,在局部变量的作用域范围内,局部变量会覆盖全局变量。③对全局变量,只有声明而灭有定义,系统会自动定义并将其初始化为0 作用域:从定义的哪一行开始到文件结束。
生命周期:从程序启动直到程序退出后消亡。
二:结构体:
1 定义结构体类型,通过结构体类型定义结构体变量。格式:struct 结构体类型名称{成员类型 成员名称;成员类型 成员名称;。。。。};
2 结构体的初始化:①先定义结构体然后初始化。 struct Person{ int age,char name}; struct Person person; person.age=10;
②定义的同时进行初始化: struct Person{int age}; struct Person p={10}; 结构体访问其成员使用.符号。
三:结构体类型的多种定义方式。
1 先定义结构体类型 然后定义变量。 2 定义结构体类型的同时定义变量。 3 定义匿名的结构体类型同时定义变量: ①结构体类型只能使用一次。②不支持整体赋值。 4 结构体定义的作用域 ①在函数外部定义的结构体类型其作用域类似于全局变量,但结构体定义不需声明。 ②在函数内部定义的结构体类型,其作用域与局部变量相同。
5 结构体数组: 元素为结构体的数组,称为结构体数组。 格式:结构体类型 数组名称[元素个数]; 例:struct Person person[5];结构体的遍历与普通数组一样。
6 结构体指针: 指向结构体变量的指针,称为结构体指针。
定义格式: 结构体类型 *指针名称; 例: struct Person *p;
访问结构体指针指向的成员的两种访问方法: ①(*p).age=10; ②p-->age=10;
7 结构体与函数:
①结构体变量作为函数参数传递是值传递。
②结构体指针作为函数参数传递是地址传递。
③结构体数组作为函数参数传递时地址传递。
8 结构体嵌套:
结构体内部可以有其他结构体类型的成员,称为结构体嵌套。
结构体嵌套注意点:①不能嵌套自己类型的成员。②可以嵌套自己类型的指针。
9:枚举 : 当某个东西只有几个固定的取值时,就使用枚举。作用:用来消除魔法数字。
先定义枚举类型,通过枚举类型定义枚举变量。 格式; enum 枚举类型名称{ 元素,元素。。。。 };
注意点:①每一个元素都是一个标识符,代表一个常量,以后定义的变量不能与枚举中的元素重名。 ②给枚举变量赋值一定要使用枚举成员。 ③枚举一般与switch配套使用。
10: typedef: 作用:给已有的数据类型起别名。 ①基本数据类型 ②结构体 ③枚举 ④指针: 基本数据类型的指针 ,结构体类型的指针, 枚举类型的指针, 函数指针,指向数组的指针(数组指针)。
day13:
一 编译预处理指令:
1 .宏定义#define:①不带参数的宏定义 ②带参数的宏定义。 2 条件编译 3 文件包含#include
2 不带参数的宏定义:在预编译的时候所出现的宏名标识的地方都会被替换成宏名后面的值。
3 注意:①在注释中的宏名不被替换。 ②在字符串中出现的宏名都不被替换。
二: 带参数的宏定义:把出现宏名的地方都会把宏名后面小括号中的参数带入到宏后面的表达式中,进行替换。
1 宏的命名规范:①全部大写 若有多个单词,中间用下划线__分隔开。(常用) ②以k开头的驼峰标识 (不常用)
2 格式; #define 宏名(参数列表) 表达式
注意: ①参数列表总没有类型 ②宏名与括号之间一定没有空格。
3 带参数的宏与函数区别:①函数有一个调用过程 会开辟新的存储空间。②宏仅仅是做一个替换的操作。
4 使用场景:①当计算较简单,参数比较少时 使用宏提高效率。 ②当逻辑较复杂 参数多使用函数。
5 宏的注意点:①习题时,注意宏仅仅做替换的操作。 ②写一个带参数的宏时,所有出现参数以及运算结果的地方都要加()括号。 ③宏的固有缺点:在使用带参数的宏时,不要使用++ -- += -= *= /= %= 等等。
三: 条件编译。
分支结构的if : 当条件满足时就执行,在程序运行阶段进行判断。
条件编译: 当条件满足时,才会编译if后的语句,在程序编译时进行判断。
两种格式:
①#if 条件 ②#ifdef 宏名
执行语句; 执行语句;//如果定义了某个宏,会编译此语句。
#elif 条件 #endif
执行语句; #ifndef 宏名
#elif 条件 执行语句;//如果没有定义某个宏,执行此语句。
执行语句; #endif
。。
。
#else
执行语句;
#endif
四: 文件包含:
#include :作用:拷贝文件。
#include" " 包含程序猿自己写的文件。 #include<> :包含系统头文件。
①#include可能导致文件的重复包含。 ②循环包含。