由于C++是本科常用语言,很久没用了,只搜集了较少的题目。
本质:指针是地址,引用是别名。
- 引用被创建时必须同时初始化,指针可以在任意时刻初始化;
- 引用不能为空,指针可以为空;
- 引用一旦初始化就不能改变引用关系,指针指向的对象可以改变。 指针强大但危险,若只需借用别名时应使用引用。
- 值传递:【n -> x】,函数内的x是外部变量n的拷贝,当x改变时n不会改变;
- 指针传递:【&n -> *x】,函数内的x是指向外部变量的指针,当x改变时n也会改变;
- 引用传递:【n -> &x】,函数内的x是n的引用,实际上是同一个对象,当x改变时n也会改变。
- 某些平台只能在特定地址处访问特定类型数据;
- 提高存取速度(int类型若从奇数地址处开始需要两个读取周期);
- 字节对齐的作用不仅是便于cpu快速访问,同时合理的利用字节对齐可以有效地节省存储空间。
- 动态申请的空间没有具体名称,只能通过指针间接访问(无论new还是malloc方式)。
- 动态申请空间都是存放在堆中,有别于系统自动分配的空间是存放在堆栈中(即栈)。
- 栈中系统分配的空间,在使用结束会自动释放。而程序员动态申请的空间则需要人为来释放,否则随着程序运行,内存占用积累,很容易造成内存泄漏。
程序申请的内存没有及时回收就造成了内存泄漏,多次内存泄漏会积累成内存溢出。当程序申请内存时,可用内存不够了,就叫内存溢出。
调用成员函数时,会根据调用函数的对象而调用不同的函数。
面向对象是一种对现实世界的理解和抽象,将需求要素转化为对象的数据和方法进行问题处理。
- 容器(Containers):deque、list、vector、map等;
- 算法(Algorithms):对容器内容执行初始化、排序、搜索、转换等方法;
- 迭代器(Iterators):遍历对象集合的元素。