23/2/28学习记录(C语言复习-1)
投递华为od已通过机试、性格测试,明天准备hr面试,现在准备技术面试
1. 关键字。 这些保留字不能作为常量名、变量名或其他标识符名称。
auto | 声明自动变量 (局部变量) |
break | 跳出当前循环 |
case | 开关语句分支 |
char | 声明字符型变量或函数返回值类型 |
const | 定义常量,如果一个变量被 const 修饰,那么它的值就不能再被改变 |
continue | 结束当前循环,开始下一轮循环 |
default | 开关语句中的"其它"分支 |
do | 循环语句的循环体 |
double | 声明双精度浮点型变量或函数返回值类型 |
else | 条件语句否定分支(与 if 连用) |
enum | 声明枚举类型 |
声明变量或函数是在其它文件或本文件的其他位置定义 | |
float | 声明浮点型变量或函数返回值类型 |
for | 一种循环语句 |
goto | 无条件跳转语句 |
if | 条件语句 |
int | 声明整型变量或函数 |
内联函数,把函数展开,把函数代码复制到调用的地方从而直接执行代码,不用跳转、压栈,节省时间内联函数相当与C语言中的#define宏定义中的带参数定义。内联是以代码复制为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。 | |
long | 声明长整型变量或函数返回值类型 |
声明寄存器变量 (请求编译器把这个修饰的变量尽可能放在cpu内部寄存器中,减少CPU到内存中抓取数据的次数,从而提高程序的执行效率。) | |
return | 子程序返回语句(可以带参数,也可不带参数) |
short | 声明短整型变量或函数 |
signed | 声明有符号类型变量或函数 |
sizeof | 计算数据类型或变量长度(即所占字节数) |
声明静态变量 | |
struct | 声明结构体类型 |
switch | 用于开关语句 |
typedef | 用以给数据类型取别名 |
unsigned | 声明无符号类型变量或函数 |
union | 声明共用体类型 |
void | 声明函数无返回值或无参数,声明无类型指针 |
说明变量在程序执行中可被隐含地改变 | |
while | 循环语句的循环条件 |
注意:volatile关键字
基本概念:因为访问寄存器要比访问内存单元快的多,所以编译器可能会优化读取和存储,暂时使用寄存器中的值,当要求使用volatile声明变量值的时候,系统总是重新从它所在的内存读取数据,忽略优化。保证精确度。提醒编译器它后面所定义的变量随时都有可能改变。
使用场景:1. 并行设备的硬件寄存器(如:状态寄存器PC)比如I/O端口,我们会去操作映射到对应IO端口的寄存器。判断寄存器的值,加上volatile关键字;2. 在中断服务函数中修改全局变量。3. 在多线程中修改全局变量。
static关键字
static 关键字不仅可以用来修饰变量,还可以用来修饰函数。在使用 static 关键字修饰变量时,我们称此变量为静态变量。静态变量的存储方式与全局变量一样,都是静态存储方式。但这里需要特别说明的是,静态变量属于静态存储方式,属于静态存储方式的变量却不一定就是静态变量。例如,全局变量虽然属于静态存储方式,但并不是静态变量,它必须由static加以定义后才能成为静态全局变量。
1.隐藏与隔离 全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,全局变量在各个源文件中都是有效的。加上static关键字后,就限定在避免在其它的源文件中引起错误。
2.保存变量内容的持久性 希望函数中局部变量的值在函数调用结束之后不会消失,因此对局部变量加上static修饰后,存储就从栈区移到静态存储区。需要保留函数上一次调用结束时的值。如果初始化后,变量只会被引用而不会改变其值,则这时用静态局部变量比较方便,以免每次调用时重新赋值。
3.默认初始化 初始化为0。在C语言中,静态变量,即全局变量和static变量,是在程序运行前创建的,其中已初始化的全局变量和static变量在编译阶段就完成了,初始值就已经保存在磁盘的.data段了,进程加载时将其映射到内存空间即可;未初始化的全局变量需要进程加载时真正的为.bss段分配内存空间,并赋值为0。静态变量的创建和初始化都是在运行前完成的。
修饰函数时 函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。好处:其他文件中可以定义相同名字的函数,不会发生冲突;静态函数不能被其他文件所用。
空格 在 C 中,空格用于描述空白符、制表符、换行符和注释。空格分隔语句的各个部分,让编译器能识别语句中的某个元素(比如 int)在哪里结束,下一个元素在哪里开始。
为了华为od机试刷题学习记录