1、数据类型关键字
注:51单片机中int占16位,而在STM32中的int是占32位。若用16位数据,需用short来表示。此处和51单片机的不同之处。同时long、unsigned long占用的也是32位,跟int是一样。
2、控制语句关键字:
A.循环语句
(1) for :一种循环语句
for 是C语言中的一个关键字,主要用来控制循环语句的执行量或数组。
(2) do :循环语句的循环体
C语言中 do 是执行某代码块的意思,do 关键字不能单独使用,通常用在 do...while循环中。在C语言中,do...while 循环是在循环的尾部检查它的条件,do...while 循环与 while 循环类似,但do...while 循环不管是真是假,都要确保至少执行一次循环。
(3) while :循环语句的循环条件
while 语句创建了一个循环,重复执行直到测试表达式为假或0。
(4) break :跳出当前循环
在循环中:break
语句用于立即终止当前循环(无论是for
循环、while
循环还是do-while
循环),并跳出循环体,继续执行循环之后的代码。
在switch语句中:break
语句用于终止switch
语句中的一个case
分支,防止代码自动执行到下一个case
分支。如果没有break
语句,代码将继续执行下一个case
分支,直到遇到break
语句或switch
语句结束。
(5) continue :结束当前循环,开始下一轮循环
continue 跳过本次循环,进入下一次。而 break 是直接跳出循环。比如 for 循环,遇到 contimue 生效后,直接重新执行 for 的表达式,也就是本循环中 continue 下面的语句就不执行,跳过循环中的一次。contimue 其作用为结束本次循环。即跳出循环体中下面尚未执行的语句,对于 while 循环,继续求解循环条件。而对于 for 循环程序流程接着求解 for 语句中的第三个部分表达。continue 语句只结束本次循环,而不终止整个循环的执行。而 break 语句则是结束整个循环过程,不再判断执行循环的条件是否成立。
B.条件语句
(1) if : 条件语句
if (表达式) {语句;}
用于单分支选择结构;如含有交叉关系,使用并列的if语句。
(2) else :条件语句否定分支(与 if 连用)
if (表达式) {语句;} else {语句;}
在C语言中 else 是与 if 一起使用的一个关键字,表示如果满足if条件则不执行 else ,否则执行else 。
(3) goto :无条件跳转语句
goto 语句可以使程序在没有任何条件的情况下跳转到指定的位置,所以 goto 语句又被称为是无条件跳转语句。使用 goto 语句只能 goto 到同一函数内,而不能从一个函数里 goto 到另外一个函数里。 不能从一段复杂的执行状态中的位置 goto 到另外一个位置,如从多重嵌套的循环判断中跳出去就是不允许的, 应该避免向两个方向跳转。
C.开关语句
(1) switch :用于开关语句
switch 语句也是一种分支语句,常常用于多分支的情况。
(2) case :开关语句分支
case 常量表达式只是起语句标号作用,并不是该处进行条件判断。在执行 switch 语句时,根据 switch 的表达式,找到与之匹配的 case 语句,就从此 case 子句执行下去,不在进行判断,直到碰到 break 或函数结束为止。c语言中 case 是和 switch 一起使用的,构成 switch—case 语句,进行判断选择,case 是用来表示选择结构的。
(3) default :开关语句中的“其他”分支
default 的作用就是switch语句里所有的 case 都不成立时所要执行的语句。default 关键字用来标记switch语句中的默认分支。
D.返回语句
return :子程序返回语句(可以带参数,也看不带参数)
return 表示把程序流程从被调函数转向主调函数并把表达式的值带回主调函数,实现函数值的返回,返回时可附带一个返回值,由 return 后面的参数指定。
3、存储类型关键字:
(1)auto
auto
关键字用于声明自动存储期限的局部变量。然而,在C语言中,局部变量默认就是自动存储期限的,因此在实际编程中,auto
关键字并不常用,因为即使你不显式地使用 auto
,局部变量仍然会被视为自动的。
(2) extern
extern
关键字用于声明一个变量或函数,是在另一个源文件中定义。extern
告诉编译器这个标识符(变量或函数)的存储是在其他地方分配的,所以在这里不需要分配额外的存储空间。
(3) register
声明寄存器变量,存放在CPU的寄存器里。而平时声明的变量是存放在内存中。寄存器变量和普通变量比起来速度上的差异很大,毕竟CPU的速度远远大于内存的速度。寄存器有两个特点:运算速度快、不能取地址。
(4) static
在函数内部:使用 static
修饰的变量在函数调用结束后仍然保持其值。即下一次调用该函数时,该静态变量将保持其上次的值。
在类内部:在类成员变量前加上 static
关键字使其成为该类的静态变量(或称为类变量)。静态变量属于类本身,而不是类的实例。即它们可以被类的所有对象共享,并且可以直接通过类名来访问,而不需要创建类的实例。
4、其它关键字:
(1) const
const
用于定义只读变量,也就是常变量。这些变量在定义时必须初始化,并且其值在程序运行期间不能被修改。当 const
修饰指针时,有两种常见的用法:const
修饰指针所指向的数据。如 const int* p
或 int const* p
,表示指针 p
可以指向不同的地址,但指向的数据值不能被修改。const
修饰指针本身,如 int* const p
,表示指针 p
指向的地址不能被修改,但指向的数据值可以被修改。const
也可以同时修饰指针和指针所指向的数据,如 const int* const p
。
与 #define
的区别:
#define
是预处理指令,用于定义常量或宏,它在预处理阶段进行文本替换,不占用内存。
const
定义的常变量在编译、运行阶段起作用,有类型、占用内存,并且可以进行类型安全检查。
(2) sizeof
用于计算对象(包括变量、数据类型、数组等)在内存中所占用的字节数
sizeof(object);
// 用于对象
sizeof(type_name);
// 用于数据类型
sizeof(array);
// 用于数组,计算整个数组所占的字节数
sizeof(expression);
// 用于表达式,计算表达式结果的数据类型的大小
示例:
int a; size_t size = sizeof(a);
// 计算整数变量 a
所占的字节数
size_t floatSize = sizeof(float);
// 计算浮点数类型在内存中所占的字节数
int arr[10]; size_t arrSize = sizeof(arr);
// 计算整数数组 arr
所占的字节数
size_t exprSize = sizeof(3 + 4.5);
// 计算表达式 3 + 4.5
的数据类型(双精度浮点数)的大小
(3) typedef
typedef
关键字用于为数据类型定义别名。typedef
通常与结构体(struct
)、联合体(union
)、枚举(enum
)等复杂数据类型一起使用,以简化代
5.基本概念浅析
5.1 定义
定义就是(编译器)创建一个对象,并且为这个对象分配一块内存,给它取上一个名字,这个名字就是我们经常所说的变量名或对象名。一个变量或对象在一定的区域内(比如函数内,全局等)只能被定义一次,如果定义多次,编译器会提示你重复定义同一个变量或对象。
5.2 声明
第一重定义:告诉编译器,这个名字已经匹配到一块内存上了,下面的代码用到的变量或对象是在别的地方定义的。(声明可以出现很多次)第二重定义:告诉编译器,这个名字我先预定了,别的地方不能再用它来做变量名或者对象名。
函数参数的声明:void fun(int i,char c)
5.3 区别
定义是创建了对象并且为这个对象分配了内存;声明没有分配内存。