既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
1.4 变量命名规则
- 所有宏定义、枚举常数、只读变量全用大写字母命名,用下划线分割单词
- 定义变量的同时千万千万别忘了初始化。定义变量时编译器并不一定清空了这块内存,它的值可能是无效的数据
1.5 signed
编译器缺省默认情况下数据为 signed 类型
1.6 switch case
case后面只能是整型或字符型的常量或常量表达式(想想字符型数据在内存里是怎么存的)
1.7 if else
在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。
1.8 void
void*
指针,任何类型的指针都可以直接赋值给它,无需进行强制类型转换,“空类型”包含“有类型”
1.9 const
- const修饰的只读变量必须在定义的同时初始化
- 先忽略类型名(编译器解析的时候也是忽略类型名),我们看const离哪个近。“近水楼台先得月”,离谁近就修饰谁。
const int *p;
// const 修饰*p
, p是指针,*p
是指针指向的对象,不可变
int const *p;
//const 修饰*p
,p 是指针,*p
是指针指向的对象,不可变
int *const p;
/const 修饰 p, p 不可变, p 指向的对象可变
const int *const p;
//前一个 const 修饰“, 后一个 const 修饰 p,指针 p 和 p 指向的对象都不可变
1.10 union
在 union中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址
2 符号
- 逻辑运算符||的条件只要有一个为真,其结果就为真;只要有一个结果为假,其结果就为假
- 左移和右移:当为正数时, 最高位补 0;而为负数时,符号位为 1,最高位是补 0 或是补 1 取决于编译系统的规定。 Tu rbo C 和很多系统规定为补 1
- 左移和右移的位数不能大于数据长度,不能小于0
- “ +”号的优先级比移位运算符的优先级高
2.1 运算优先级
1 []
高于*
,比如int *a[];
2 函数()
高于*
,比如 int *fp();
3 ==和!=高于位运算,比如val & mask != 0;
4 ==和!=高于赋值运算符,比如c = getchar() != EOF
5 算术运算符高于赋值运算符,比如 msb << 4 + lsb
3 预处理
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新
、电子书籍、讲解视频,并且后续会持续更新**