1、关于static的使用
在 C 中引入关键字 static 是为了表示退出一个块后仍然存在的局部变量, static 在 C 中有了第二种含义:
用来表示不能被其它文件访问的全局变量和函数。------一个是和内存有关系,一个是和作用域有关系。
2、switch-case结构中,case 后面只能是整型或字符型的常量或常量表达式。
3、break和continue比较:
break 关键字很重要,表示终止本层循环。continue 表示终止本次(本轮) 循环。
4、volatile关键字的使用----不能对代码进行优化,每次使用都要从内存中直接读取
例子:
volatile int i=10;
int j = i; //(1)语句
int k = i; //(2)语句
volatile 关键字告诉编译器 i 是随时可能发生变化的,每次使用它的时候必须从内存中取出 i
的值,因而编译器生成的汇编代码会重新从 i 的地址处读取数据放在 k 中
5、内存编址是以字节为单位的,也就是说一个内存单元的内容是一个字节
6、C语言中,函数就是一段代码的封装。函数名的实质就是这一段代码的首地址。
7、数组的缺陷:数组中所有元素类型必须相同
8、栈是一种数据结构,C语言中使用栈来保存局部变量。栈是被发明出来管理内存的。注意:使用栈时,需要给变量清零堆管理内存的特
9、堆(大块内存、手工分配&使用&释放)-----摘自朱老师物联网大课堂
特点一:容量不限(常规使用的需求容量都能满足)。
特点二:申请及释放都需要手工进行,手工进行的含义就是需要程序员写代码明确进行申请
malloc 及释放 free。如果程序员申请内存并使用后未释放,这段内存就丢失了(在堆管理器
的记录中,这段内存仍然属于你这个进程,但是进程自己又以为这段内存已经不用了,再用
的时候又会去申请新的内存块,这就叫吃内存),称为内存泄漏。在 C/C++语言中,内存泄
漏是最严重的程序 bug,这也是别人认为 Java/C#等语言比 C/C++优秀的地方。
10、如何避免野指针的产生:
常规的做法是:
第一点:定义指针时,同时初始化为 NULL
第二点:在指针解引用之前,先去判断这个指针是不是 NULL
第三点:指针使用完之后,将其赋值为 NULL
第四点:在指针使用之前,将其赋值绑定给一个可用地址空间