记录学习,持续更新
目录
1、什么是野指针,野指针出现的情况有哪些,怎么避免?
(1)野指针是一个未初始化,或者未明确指向确定地址的指针。它可能指向任何地址,包括程序内的合法内存区域或非法内存区域
(2)野指针产生的情况:
1、指针未进行初始化
2、指针指向已经被释放的内存区域
3、指针访问了超出其分配的内存区域
(3)如何避免
1、定义指针的时候,进行初始化,赋值为NULL
2、解引用之前,先去判断这个指针是不是NULL
3、指针使用完毕之后,将其赋值为NULL
4、指针使用前,给它一个可用的内存地址空间
2、介绍一下static关键字和const关键字
static修饰变量时,变量的生命周期会被延长,跟随整个程序结束,同时只能在内部单独访问,无法被其他文件调用(普通的变量创建后放在栈区,static修饰后会放在静态区,相当于变成了全局变量)
const修饰的变量进行初始化后不能再进行修改,强行修改会发生报错,用来保护数据,意味着只读,其中在修饰指针变量时,有以下三种用法:
1、const int *ptr 用于保护指针指向的内容不被修改
2、int *const ptr 用于保护指针地址不被修改
3、const int *const ptr 用于保护指针指向的内容和指针地址都不被修改
3、描述一下栈和队列
(1)相似点:都是操作受限的线性数据结构
(2)不同点:
1、栈:遵循后进先出原则,即最后添加的元素将是第一个被移除的元素。添加(push)和删除(pop)操作都在同一端进行,即栈顶。
2、队列:遵循先进先出原则,即最先添加的元素将是第一个被移除的元素。添加操作在一端进行(队尾),而删除操作在另一端进行(队首)。
4、define和typedef的区别
#define主要用于定义宏,进行与处理阶段的文本简单替换,不检查正确性;typedef用于为数据类型定义新的名称,且定义的别名在进行编译时会进行类型检查,更加安全
5、#include< >和#include" "的区别
#include< >是到指定的目录寻找头文件;#include" "先到项目所在目录寻找头文件,如果没有找到,再去系统指定的目录下寻找