关键字 32个
编译器预先定义一定意义的字符串
杂项
return
sizeof
不是函数,编译器实现的,而不是库中有该函数
数据类型
资源属性中大小限定 具体大小和编译器有关
char
硬件操作最小单位-bit–0/1 软件操作最小单位-8bit == 1B char被当作硬件处理最小单位 ASCII码表 8bit == 256
int
编译器最优的处理大小: 系统单周期,接受的最大处理单位,int 32bit 4B int 16bit 2B 2int
整型常量
char a = 300; 300l 300L后面加l
进制表示
int a = 010; 开头0表示8进制 int a = 0x10; 开头0x表示16进制
long short
数据类型组合标志 long-64 short-16
unsigned signed
数据类型限制标志 默认有符号signed 内存最高字节是否作为符号位
float double
浮点数与整型内存表示形式不同 float 4B double 8B 非常消耗内存空间 1.0 1.1 double 1.0f float
void
声明标志,不是使用标志,语义符
自定义数据类型
struct(结构体)
元素之间的和
基本语法
//告知空间,没有申请内存
//声明有顺序,申请内存前一个尾后一个头
struct myabc{
unsigned int a;
unsigned int b;
unsigned int c;
unsigned int d;
};
//使用
struct myabc mybuf
union(共用体)
公用起始地址的一段内存 技巧性代码
基本语法
//声明,
union myabc{
char a;
int b;
};
//使用
//abc使用表示abc这样类型的内存
union myabc abc;
//int使用表示int这样类型的内存
int a;
enum(enumerate枚举)
被命名的整数常数的集合 和define一样,只是集合了起来
//宏定义
#define MON 0
#define TUE 1
#define WED 2
//枚举典型写法
enum{MOD,TUE,WED};
//命名,默认从0开始赋值,依次加一,指定值后同理
enum abc{MOD,TUE,WED}; //相当于宏定义
enum abc{MOD = 100,TUE,WED}; //相当于宏定义
typedef
别名,常定义 xxx_t
int a; //a是一个int类型变量
typedef int a_t;//a是一个int类型外号
a_t mysize=10;
逻辑结构
CPU顺序执行程序 分支 –> 选择 循环
if-else
if(条件表达式)
xxx
else
xxx
switch-case
switch(整形变量) //不能浮点数
case: xxx;
break;
...
default: ;break;
do,while,for
for 次数 while 条件 do 先执行
continue,break,goto
continue 继续 break tiaochu goto 尽量不要用,函数内部跳转
类型修饰符
CPU 寄存器 内存 寄存器在CPU里,程序读写寄存器速度大于读取内存的速度 资源属性中位置限定 内存有的可读可写,有的只读
auto
- auto常省略,表示存储在可读可写空间
- 区域如果在{}里表示栈空间
auto char a;
auto long a;
register
- 可读不可写
- 限制变量定义在寄存器上的修饰符
- 定义一些快速访问变量
- 编译器会尽量安排CPU寄存器存放,但是如果寄存器不足还会存在存储器中
- &(看地址的)对register不起作用
register
static 静态
应用场景
修饰三种数据
函数内部变量
int fun()
{
int a; ==> static int a
}
函数外部变量
int a; ==> static int a;
int fun(){}
函数修饰符
工程用的多
int fun(); ==> static int fun();
extern 外部申明
const 常量定义
只读变量 设计初衷是不能变的,但是还是可以变(直接改内存?)
const int a = 100;
a = 200;//编译器报错
volatile
告知编译器方法的关键字,不优化编译
int a = 100;
while(a == 100);
mylac();
编译器
f1: LDR R0, [a]
f2: CMP R0, #100
f3: JMPeq f1 -优化-> JMPEQ f2 //R0赋为100优化为while直接判断100,但数值可被外部改变的话就会出问题
f4: mylcd();