什么是回调函数:回调函数就是一个参数,将这个函数作为参数传到另一个函数里面,当那个函数执行完之后, 再执行传进去的这个函数。这个过程就叫做回调 |
结构体和共用体的区别:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用 同一段内存,修改一个成员会影响其余所有成员。结构体占用的内存大于等于所有成员占用的内存的总和,共 用体占用的内存等于最长的成员占用的内存。共用体也是一种自定义类型,可以通过它来创建变量 |
初始化和赋初值的区别:初始化是程序在运行前由系统将变量值进行赋值,而赋值是在程序开始运行之后完成, 赋值动作属于程序完成 |
局部变量和全局变量是否可以重名:能,局部会屏蔽全局。要用全局变量,需要使用 ":: " 局部变量可以与全 局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言, 在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变 量的作用域就在那个循环体内。引用一个已经定义过的全局变量:extern 可以用引用头文件的方式,也可以用 extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在 编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期 间报错 |
形参和实参有什么区别:1) 形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参 变量只有在函数内部有效,不能在函数外部使用 定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值 自动类型转换,或者进行了强制类型转换,那么实参类型也可以不同于形参类型。 句话说,一旦完成数据的传递,实参和形参就再也没有关系了,所以,在函数调用过程中,形参的值发生改变 并不会影响实参 |
数组和指针的区别: 数组是一组相同类型的数据,它们在内存中按照一定的顺序连续存放。可以通过下标来访问 数组中的元素。数组名就是指向数组第一个元素的指针。指针是一个变量,它存储了另一个变量的内存地址。指 针可以用来访问该地址中存储的数据,并可以修改该地址中存储的数据 1. 内存分配:数组在定义时需要指定数组长度,因此需要分配一段连续的内存空间来保存数组元素;而指针不需 要分配空间,只需要保存变量的内存地址 2. 变量类型:数组是一种特殊类型的变量,可以直接对整个数组进行操作;而指针本身也是一种变量类型,但不 能对整个指针进行操作,只能通过指针访问指向的数据 3. 数据访问:使用数组名和下标可以方便地访问数组中任何一个元素;而使用指针需要先定义并初始化一个指向 某个变量或者对象地址的指针才能通过该指针来访问这个对象或变量 4. 传递参数:将数组作为函数参数传递时,实际上传递的是数组的地址,因此函数内部可以直接操作原始数组; 而指针也可以作为函数参数传递,但要使用指针解引用(*)来操作指针所指向的变量 |
void指针是空指针吗?它有什么作用?(这两个之间的区别):空指针是没有指向的指针,将暂时用不到的指针 定义成空指针,能防止误用。而void * 类型的指针是有指向的指针,但它的指向的数据的类型暂时不确定,所以 先弄成void * 类型,后期一般要强制转换的 |
快速排序的思想:快速排序采用的是分治思想,即在一个无序的序列中选取一个任意的基准元素,利用其将待排 序的序列分成两部分,前面部分元素均小于或等于基准元素,后面部分均大于或等于基准元素,然后采用递归的 方法分别对前后两部分重复上述操作,直到将无序序列排列成有序序列。 |
什么是野指针?如何避免?:野指针就是指针指向的位置不可知的。野指针的三种情况:指针未定义、指针越界 访问、指向的空间释放。规避野指针: 1、指针初始化 (如果没有就初始化为NULL) |
网络tcp/ip体系结构:物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 |