一、思维导图
二、面试题
1、什么是回调函数
作为其他函数参数的函数。
2、结构体与共用体的区别
结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。结构体占用的内存大于等于所有成员占用的内存的总和(需要满足字节对齐原则),共用体占用的内存等于最长的成员占用的内存。
3、赋值与初始化的不同
赋值不会对内存空间进行修改,初始化会在系统分配内存。
4、局部变量与全局变量是否能重名
可以重名,修改局部变量不会改变全局变脸,局部会屏蔽全局。要用全局变量,需要使用extern调用,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。
5、形参与实参的区别
1>形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。
2> 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。
6、 数组与指针的区别
数组:数组是用于储存多个相同类型数据的集合。数据类型是构造类型
指针:指针相当于一个变量,但是它和不同变量不一样,它存放的是其它变量在内存中的地址。数据类型是指针类型。
7、void指针是空指针吗?有何作用?
空指针是(void *)0,而void指针是通用类型指针,可以指向任意数据类型,需要强转。
8、简述快速排序的思想
通过一趟排序将待排序的序列分割为左右两个子序列,左边的子序列中所有数据都比右边子序列中的数据小,然后对左右两个子序列继续进行排序,直到整个序列有序。
9、什么是野指针,如何避免野指针
野指针指未初始化的指针,通过数组越界访问的指针以及指向被释放地址的指针。当指针没有初始化的时候将指针指向NULL,给指针赋值时检查是否分配内存空间,当不再使用指针后再使用free函数。
10、网络7层体系结构
物理层,数据链路层,网络层,运输层,会话层,表示层,应用层。