C基础——词法符号(嵌入式学习)-创新互联
- 概念
- 关键字(32个)
- 概念
- 分类
- 存储类型
- 数据类型
- 构造类型
- 选择结构
- 循环结构
- 其他
- 标识符
- 运算符
- 算术运算符
- 逻辑运算符
- 位运算符
- 关系运算符
- 赋值运算符
- 三目运算符
- 运算符的优先级
- 分隔符
- 标点符号
程序设计中由若干字符组成的有意义的最小语法单位
按照作用分类:关键字、标识符、运算符、分隔符、标点符号
关键字(32个) 概念关键字是由系统预定义的具有特殊功能的词法符号
分类 存储类型auto
关键字auto用于声明一个变量为自动变量
自动变量也称局部变量。将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。所有局部变量默认都是auto,一般省略不写。
static
普通局部变量是再熟悉不过的变量了,在任何一个函数内部定义的变量(不加static修饰符)都属于这个范畴。编译器一般不对普通局部变量进行初始化,也就是说它的值在初始时是不确定的,除非对其显式赋值。
变量在全局数据区分配内存空间;编译器自动对其初始化
其作用域为局部作用域,当定义它的函数结束时,其作用域随之结束
extern
一种是需要建立存储空间的。
例如:int a 在声明的时候就已经建立了存储空间。
另一种是不需要建立存储空间的,通过使用extern关键字声明变量名而不定义它。
例如:extern int a 其中变量 a 可以在别的文件中定义的。
简单总结:除非有extern关键字,否则都是变量的定义。
register
register修饰符暗示编译程序相应的变量将被频繁地使用,如果可能的话,应将其保存在CPU的寄存器中,以加快其存储速度。
但是使用register修饰符有几点限制:
(1)register变量必须是能被CPU所接受的类型。
(2)不能用“&”来获取register变量的地址。
(3)只有局部自动变量和形式参数可以作为寄存器变量,其它(如全局变量)不行。
(4)局部静态变量不能定义为寄存器变量。不能写成:register static int a, b, c;
(5)不能定义任意多个寄存器变量,而且某些寄存器只能接受特定类型的数据
char、short 、int、 long 、float、double 、signed、unsigned
signed对应的即unsigned,后者意为无符号。其实说signed很常见也不见得,因为我们常用的int、short和long,以及long long,默认情况下都是signed有符号的。所以相比起来unsigned的戏份可能比signed更多,signed在这里只是相当于刻意地去说明其后面的变量是有符号类型的。
signed就是带符号位的那种存储方式,unsigned就是不带符号位的那种存储方式,且unsigned只表示非负数
struct、union、enum
struct
通俗来讲,就是打包封装一些有共同特征的不同数据的变量封装在内部,通过一定方法访问修改内部变量。可以说,结构体是让一些很散的数据变得很整(即井然有序)。
语法:struct 结构体名 { 结构体成员列表 };
struct 结构体名 变量名
struct 结构体名 变量名 = { 成员1值 , 成员2值…}
定义结构体时创建变量
union
union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。但在“联合”中, 各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度 。一个联合体类型必须经过定义之后, 才能使用它,才能把一个变量声明定义为该联合体类型。
当定义结构对象时,如果没有显式地初始化它们,则会采用一般初始化规则:如果该结构对象属于动态存储类型,那么其成员具有不确定的初始值。如果结构对象具有静态存储周期,那么其非指针成员初始值是 0,其指针成员初始值是空指针。
struct和union和区别
1.结构和联合都是由多个不同的数据类型成员组成的,但是在任一时刻联合只存放一个被选中的成员,而结构的所有成员都存在。
2。对于联合的不同成员赋值,将会对其他成员重写,原来成员的值就不存在了,而对结构的不同成员赋值是会不影响的。
对联合变量的赋值,都只能对变量的成员进行,一个联合变量每次只能赋值给一个成员,一个联合变量的值就是当前联合变量的某一个成员值。
enum
1、标识枚举类型。定义枚举类型必须用enum开头。
2、枚举数据表中的名字是程序员自己设定,这些名字只是一个符号。但注意命名时要提高程序的可读性。枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。
3、枚举数据表的值都是整数。第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。也可以人为设定枚举成员的值,从而自定义某个范围内的整数。
3、可以在定义类型时对枚举常量初始化。
4、枚举类型可以进行比较。
5、枚举常量不是字符串,不能用%s方式输出字符串。
6、枚举型是预处理指令#define的替代
if、else、switch、case、default(先了解后期心情好了再更新)
循环结构for、while、goto、do、break、continue (先了解后期心情好了再更新)
其他void(空类型)、typedef(重定义)、volatile(防止编译器优化)、const(只读修饰、常量化)、sizeof(计算数据所占空间大小)、return(返回值) -----------(先了解后期心情好了再更新)
标识符标识变量、函数或其他用户自定义的项目名称
遵循规则:
1.由数字、字母、下划线组成
2.开头不能是数字
3.不能和关键字重复
4.见名知义
== + - * / % ++ – ==
**/:**整数相除,向下取整
**%**只能用于整数运算
**++:**如果++作为表达式参与运算,要注意++的前后位置,来判断是先运算还是先取值。
例子
1)int b = ++a;//先自加后赋值
2)int c = a++;//先赋值后自加
3)printf("%d\n",++a);//4 ++在前,先自加后打印
4)printf("%d\n",a++);//3 ++在后,先打印后自加
5)int a=3;a++;printf("%d\n",a);//4
6)int a=3;++a;printf("%d\n",a);//4
相当于:a=a+1;不等同于a+1
&& || !
运算法则:
&&(逻辑与):全真为真,一假则假
||(逻辑或):一真则真,全假则假
!(逻辑非):非真即假,非假即真
截断法则:
逻辑与运算中,如果前面的表达式为假,则后面的表达式不执行
逻辑或运算中,如果前面的表达式为真,则后面的表达式不执行
& | ~ ^<< >>
&:全1则1,有0则0
|:有1则1,全0则0
^:异或
~:按位取反,0变1,1变0
.<<:左移左移几位右边补几个0
.>>:右移
右移几位,左边补几个符号位
< >>=<= == !=
赋值运算符= += -= *= /= %=
等号右边赋值给等号左边
表达式1?表达式2:表达式3
运算法则:先执行表达式1,然后判断表达式1是否成立,如果成立就执行表达式2,否则就执行
单目运算符 ! ~ ++ –
算术运算符 * / % + -
移位运算符<< >>
关系运算符<<= >>= == !=
位与运算符 &
异或运算符 ^ |
逻辑运算符 && ||
条件运算符 ?:
赋值运算符 = += *= /= %= …
口诀: 单算移关与 ;异或逻条赋; 从右向左单条赋
分号,逗号,大括号,中括号,小括号
标点符号换行、空格、tab
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
本文标题:C基础——词法符号(嵌入式学习)-创新互联
网页URL:http://ybzwz.com/article/sphce.html