1. C++的类和C里面的struct有什么区别?
struct成员默认访问权限为public,而class成员默认访问权限为private
2. 析构函数和虚函数的用法和作用
析构函数是在对象生存期结束时自动调用的函数,用来释放在构造函数分配的内存。
虚函数是指被关键字virtual说明的函数,作用是使用C++语言的多态特性
3. 全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?
1) 全局变量的作用用这个程序块,而局部变量作用于当前函数
2) 前者在内存中分配在全局数据区,后者分配在栈区
3) 生命周期不同:全局变量随主程序创建和创建,随主程序销毁而销毁,局部变量在局部函数内部,甚至局部循环体等内部存在,退出就不存在
4) 使用方式不同:通过声明后全局变量程序的各个部分都可以用到,局部变量只能在局部使用
4. 有N个大小不等的自然数(1–N),请将它们由小到大排序.要求程序算法:时间复杂度为O(n),空间复杂度为O(1)。
void sort(int e[], int n)
{
int i;
int t;
for (i=1; i {
t = e[e[i]];
e[e[i]] = e[i];
e[i] = t;
}
}
5. 堆与栈的去区别
A. 申请方式不同
Stack由系统自动分配,而heap需要程序员自己申请,并指明大小。
B. 申请后系统的响应不同
Stack:只要栈的剩余空间大于申请空间,系统就为程序提供内存,否则将抛出栈溢出异常
Heap:当系统收到程序申请时,先遍历操作系统中记录空闲内存地址的链表,寻找第一个大于所申请空间的堆结点,然后将该结点从空间结点链表中删 除,并将该结点的空间分配给程序。另外,大多数系统还会在这块内存空间中的首地址处记录本次分配的大小,以便于delete语句正确释放空间。而且,由于 找到的堆结点的大小不一定正好等于申请的大小,系统会自动将多余的那部分重新放入空闲链表。