—————————————————————————————————
13,数组和指针的区别?
数组使用的是一块连续的内存空间;
指针存储的是某个变量存储空间的地址。
14,数组和链表的区别?
数组里的元素是连续存放的,优点是访问方便,缺点是对空间的利用率低;
链表里的元素是不连续存放的,优点是对空间的利用率高,缺点是对元素的访问相对数组比较麻烦。
当我们只是对元素访问的时候,且使用的空间不大时,考虑数组;
当我们需要频繁插入删除元素的时候,且使用的空间相对比较多时,考虑链表。
15,静态库和动态库(共享库)的区别?
库是已经写好的,可以复用的代码。
程序编辑->预编译->编译->汇编->链接->程序执行
静态库:
windows系统上是.lib后缀,linux系统上是.a后缀,发生阶段是“链接”;
在链接阶段,静态库和汇编产生的.o文件以及引用一起被链接到可执行文件当中,那么可执行文件就显得“臃肿”;
优点:因为静态库在编译时已经链接了函数库,所以程序执行上不需要函数库,可移植性强。
需要打包工具。
动态库:
windows系统上是.dll后缀,linux系统上是.so后缀,发生阶段是“执行”;
动态库在函数执行时被载入到内存中,和其他程序共享,所以又叫共享库。
优点:避免了对空间的浪费。
不需要打包工具,软件可实现。
详细可看参考6。
16,重载和重写的区别?
重载(overload):函数名相同,参数不同。
重写(override,又叫覆盖):子类重新定义父类中的虚函数,名称和参数相同,但是实现不同。
重定义(redefining):子类重新定义父类中的非虚函数,名称必须相同,参数可以不同。
代码来源:参考7
17,堆和栈的区别?
C++中,内存分为5个区:堆,栈,自由存储区,全局/静态存储区,常量存储区。
堆:是由new分配的内存块,程序员自己代码释放,编译器不管,如果程序员没有释放,在程序结束后,系统会自己回收资源。
栈:是程序需要时自动分配,不需要时自动清除的变量存储区。主要放局部变量,函数参数等。
自由存储区:由malloc等申请的存储空间,和堆相似,由free释放。
全局/静态存储区:全局变量和静态变量被分配到同一块内存中。
常量存储区:里面放常量,不容许修改。
详细请看参考8
18,指针和引用有什么区别?
指针其实是个变量,只是存储的是指针,引用是变量的别名,和变量本身没什么区别。
a,引用不可以为空,被定义时就需要被初始化,但是指针不需要被初始化;
b,可以const指针,但是没有const引用;
c,指针可以有多级,但是引用只有一级;
d,引用在初始化后,不可以改变,就是那个变量的别名了,但是指针可以改变;
e,sizeof(引用)结果是变量本身的大小,sizeof(指针)结果是指针的长度;