目录
关键字
编译器预先定义了一定意义的字符串(32个关键字)。
1.杂项
sizeof
编译器给我们查看内存空间容量的一个关键字,不存在函数调用。
int a;
printf("the a is %d\n", sizeof a); //the a is 4
return
返回的概念。
2.数据类型
C语言操作对象:资源/内存(内存资源,LCD,LED等)。
限制内存的大小关键字。
char
硬件芯片操作的最小单位: bit 1 0
软件操作的最小单位:Bety 8bit == 1B
应用场景:
硬件处理的最小单位。
ASCII码表 8bit == 256
int
大小:
根据编译器来决定 TC2.0
编译器最优的处理大小:
系统一个周期,所能接受的最大单位,int
32bit处理器 4B int
16bit处理器 2B int
long、short
特定长度的限制符
unsigned、signed
无符号:数据。
有符号:数字(系统默认有符号数)。
内存的最高字节是符号位,还是数据。
位运算中需要特别注意有无符号。
float、double
大小:
float 4B
double 8B
内存存在的形式
整数
0x10 16
0001 0000 16
浮点常量
1.0 1.1 double
1.0f 1.1f float
void
声明标志。
3.自定义数据类型
C编译器默认定义的内存分配不符合实际资源的形式。
自定义 = 基本元素的集合
struct
元素之间的和。
struct mayabc{
unsigned int a;
unsigned int b;
unsigned int c;
unsigned int d;
};
struct mayabc mybuf;
union
共用起始地址的一段内存。
struct元素之间累加,union元素之间首地址对其。
union myabc{
char a;
int b;
};
union myabc mybuf;
enum
被命名的整型常数的集合。
enum 枚举名称{常量列表}; //名称可以直接删除
enum week{
MOD = 0,
TUE,
WED
};
printf("the %d\n", MOD);
typedef
数据类型的别名。
int a; a是int类型的变量
typedef int a; a是一个int类型的外号
4.逻辑结构
CPU顺序执行程序
PC指针
分支、循环
if、else
条件
if(条件表达式)
do_something
else
do_something
switch、case、default
多分支
swtich(整型数字){
case 整型数字:
break;
case 整型数字:
break;
default:
}
do、while、for
for:次数
while:条件
continue、break、goto
goto:在同一个函数内使用。
5.类型修饰符
对内存资源存放位置的限定。
auto
默认情况下的类型(分配的内存可读可写)。
若在{ }内,栈空间。
register
限制变量定义在寄存器的修饰符。
定义一些快速访问的变量。
编译器会尽量安排CPU的寄存器去存放该变量,如果寄存器不足时,变量还是放在存储器中。
&这个符号对register不起作用。
------------------------------------
内存(存储器) 寄存器
地址(0x001) r0、r1...
static
静态
应用场景:
1、函数内部变量
int fun()
{
int a; ====> static int a;
}
2、函数外部变量
int a; ====> static int a;
3、函数的修饰符
int fun(); ======> static int fun();
const
常量的定义(不能改变)。
只读的变量。
extern
全局量关键字。
volatile
告知编译器编译方法的关键字,不优化。
修饰的变量值的修改,不仅仅可以通过软件修改,也可以通过其他方式(硬件外部的用户)。
int a = 100;
while(a==100);
mylcd();
----------------------------------------------------------------
[a]: a的地址
f1: LDR R0, [a]
f2:CMP R0, #100
f3:JMPeq f1 ======>优化后 JMPeq f2
f4:mylcd()