一、常量与变量:
1、常量:
在程序执行过程中值不会发生变化的量,不会出现在赋值的左边
1、整型:整数
2、实型:小数
3、字符:单引号引起的字符,实现特定功能‘ \n’ ,'\t' 存储在char
4、字符串:双引号引起的一个或多个字符组成序列(尾零"")存储的变量为数组
5、标识常量(宏):#define PI 3.14 (对数值类型不做校验),有计算公式要注意优先级打括号
▲▲宏定义可能会出现bug,但是宏定义是编译阶段就处理完成,不影响程序的运行速度。
在不追求处理速度的情况下,尽量使用函数代替宏定义以此来提高程序的稳定性
2、变量:
定义:
用来保存一定内容,并且在执行过程中值随时会发生变化的量
【存储类型】 数值类型 标识符 = 值
type name= value
存储类型: auto static register extern
数据类型:基本数据类型+构造类型
标识符不能以数字开头,定标识符尽量做到见名生义
存储类型:
存储类型: auto static register extern
auto:默认自动分配空间
static:自动初始化为0或者空,其值具有继承性,另外常用于限制一个变量或函数(用于全局变量)
register:建议把变量放入寄存器中,只能定义局部变量,大小为32位以内,如double就不行,且寄存器没有地址,故寄存器类型的变量无法打印出地址
extern:(可以应用于其他文件中)不能改变说明的变量值和类型。例如main函数中引用了头文件中定义的变量,头文件中的变量需声明extern
volatile:例如在多线程程序中,如果一个变量可能会被多个线程同时访问和修改,那么它应该被声明为 volatile
。这可以防止编译器优化掉对变量的读取,因为编译器不能假设变量的值在内存中是稳定的。
变量的生命周期和作用范围:
全局变量:放在main函数之前的变量,局部对变量的调用都可能影响全局变量的值,习惯加上static
局部变量:内层的局部变量屏蔽外部的全局变量:内i屏蔽外i
二、运算符和表达式:
1、常见的运算符:
1、每个运算符所需要的符号数量:单目双目
2、运算符在前,先计算,再取值;变量在前 ,先取变量值使用,再进行计算:++i | i++
3、 比较运算符:得到真与假,且非0即为真,0即为假
4、短路特性:&&左边为非零,才会对右边表达式进行判断
||左边为零才会对右边进行判断
5、 a * = 1 -->a = a*1
(+= 、-=、/=、%=同理)
6、条件运算符:a ?b:c
7、▲sizeof:计算数据类型、变量、常量的大小
注意,sizeof是一个关键字,在编译阶段就已经进行转换了。
8、强制转换符:数据类型例如float p= 3.9;a=(int)p,对p本来的值没有改变
2、运算符优先级:
3、表达式:
表达式和语句:区别于加不加分号
表达式一般就是一个布尔类型的值,值为0则是false,非0则是true。
4、位运算:
操作数:在linux嵌入式开发中有二进制的原数
1、左右移:
B110 >> 1 --> B11
2、取反 ~ :
B110-->B001
3、按位或、按位与、异或、同或
i=B1001,j=B1100
| 或: i | j=1101
有1为1
& 与:i & j=1000
有0为0
^ 异或:i ^ j=0101
不同为1
~^: 同或:~(i^j)=1010
相同为1