一、关键字
1、关键字概念及sizeof, return
编译器预先定义了一定意义的字符串
sizeof是关键字
- sizeof:编译器给我们查看内存空间容量的一个工具,单位:字节
- return 返回 承上启下
2、数据类型 (掌握大小范围
-
C操作对象:资源/内存(内存类型的资源:LCD LED I^2C 串口……)
-
C如何描述这些资源的属性?
- 资源属性【大小】-----由数据类型关键字来定义,用来限制内存大小
- 数据类型的大小最终由编译器来决定
1、char
硬件芯片操作的最小单位:bit
软件操作的最小单位:8bit==1B (一个字节)
char 描述的是硬件能够操作的在软件上体现的最小单位
应用场景:
- 硬件处理的最小单位;
- ASCII码表 8bit
- 10位能够容纳的数据大小是:
2、int \long\short
- int
- 大小:编译器有一个最优的处理大小,是按照CPU数据总线的最大容量
- 编译器最优处理大小:系统一个周期所能接受的最大处理单位即–int;32位的处理系统:CPU一个周期能处理的是32bit —4B----int;16位处理系统:2B–int
- 整型常量
- char a=300// 300是常量 300L:long类型
- 2B: 65535 int a =66535// 在16位处理系统会溢出
- 进制表示
- 3bit—八进制 4bit—十六进制 二进制
- 八进制:int a=010;//8 以0开头
- 十六进制:int a =0x10//16
- 特殊长度的限制符
- long、short
3、unsigned signed 无符号有符号
- 内存空间的最高字节是符号位还是数据位
- 无符号:数据 采集到的一些视频。。。
- 有符号:数字
补充: 计算机存储数据机制:正数存储的二进制原码,负数存储的是二进制的补码。 补码是负数的绝对值反码加1。
4、float 、double
- 整数:
- 浮点数:在内存中的表现形式和整数是完全不一样的
- 大小:float—4B double—8B
- 浮点型常量
- 1.0f : 4 字节的float类型
5、void (语义意义
void a :占位标志,声明标志,而不是使用标识
3、自定义数据类型
C编译器默认的内存分配不符合实际资源的形式
自定义=
1、struct 元素之间的和
语法:
struct myabc{
unsigned int a;
unsigned int b;
unsigned int c;
};
struct myabc mybuf;
结构体中的顺序是有要求的
2、union 共用体 共用起始地址的一段内容
应用:技巧性的代码
语法:
union myabc{
char a;
int b;
};
struct myabc abc;
3、enum 一一列举 被命名的整型常数的集合
地位:地位很低
语法:enum 枚举名称{常量列表};
#define MON 0
#define TUE 1
#define WED 2
enum {MON,TUE,WED};//相当于上面的宏定义 默认从0开始累加
应用场景:可以把不同芯片的功能打包
4、typedef 只是数据类型的别名
将原有的数据类型取个外号,更易阅读 xxx_t
语法:
int a; a是一个int 类型的变量
typedef int a_t; a是一个int类型的外号
a_t myheight;
应用场景:和指针一起用比较多
4、逻辑结构 分支/循环
C语言提供的程序执行方式
CPU顺序执行程序
1、if、else 条件
2、switch、case、default 多分支
switch(整型数字){ } 不能跟浮点数
3、do while/for
区别:
- for: 次数
- while:条件
4、continue、break、goto 循环中的控制符
goto: 在函数内部进行跳转很好用
5、类型修饰符
对内存资源存放位置的限定;数据类型是对大小的限定
资源属性中位置的限定,应用:希望一些程序不可修改,底层驱动中会大量使用
1、auto
默认情况 ----->分配的内存都是可读可写的区域,区域如果在{}中—>栈空间
2、register
int a;
register int a; //限制变量定义在寄存器上的修饰符
-
内存(存储器) 寄存器;CPU操作寄存器是比去操作内存快得多
-
0x100 R0,R2
-
应用场景: 定义一些快速访问的变量
-
编译器会尽量安排CPU的寄存器去存放a,如果寄存器不足时,a还是放在存储器中。(尽量去放)
3、static
静态
应用场景:
-
修饰3种数据
-
函数内部的变量
-
int fun(){ static int a; }
-
-
函数外部的变量(全局变量
-
static int a; int fun(){ }
-
-
函数的修饰符
-
int fun()--->static int fun();
-
-
4、extern 外部声明
应用场景:全局变量函数中使用
5、const 常量的定义
只读的变量
内存泄漏:
6、volatile 告知编译器编译方法的关键字,不优化编译
驱动开发的底层用的很多
修饰变量的值的修改,不仅仅可以通过软件,也可以通过其他方式(硬件外部的用户)