1. C++的類和C里面的struct有什么區(qū)別?
struct成員默認訪問權(quán)限為public,而class成員默認訪問權(quán)限為private
2. 析構(gòu)函數(shù)和虛函數(shù)的用法和作用
析構(gòu)函數(shù)是在對象生存期結(jié)束時自動調(diào)用的函數(shù),用來釋放在構(gòu)造函數(shù)分配的內(nèi)存。
虛函數(shù)是指被關(guān)鍵字virtual說明的函數(shù),作用是使用C++語言的多態(tài)特性
3. 全局變量和局部變量有什么區(qū)別?是怎么實現(xiàn)的?操作系統(tǒng)和編譯器是怎么知道的?
1) 全局變量的作用用這個程序塊,而局部變量作用于當前函數(shù)
2) 前者在內(nèi)存中分配在全局數(shù)據(jù)區(qū),后者分配在棧區(qū)
3) 生命周期不同:全局變量隨主程序創(chuàng)建和創(chuàng)建,隨主程序銷毀而銷毀,局部變量在局部函數(shù)內(nèi)部,甚至局部循環(huán)體等內(nèi)部存在,退出就不存在
4) 使用方式不同:通過聲明后全局變量程序的各個部分都可以用到,局部變量只能在局部使用
4. 有N個大小不等的自然數(shù)(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. 堆與棧的去區(qū)別
A. 申請方式不同
Stack由系統(tǒng)自動分配,而heap需要程序員自己申請,并指明大小。
B. 申請后系統(tǒng)的響應不同
Stack:只要棧的剩余空間大于申請空間,系統(tǒng)就為程序提供內(nèi)存,否則將拋出棧溢出異常
Heap:當系統(tǒng)收到程序申請時,先遍歷操作系統(tǒng)中記錄空閑內(nèi)存地址的鏈表,尋找第一個大于所申請空間的堆結(jié)點,然后將該結(jié)點從空間結(jié)點鏈表中刪 除,并將該結(jié)點的空間分配給程序。另外,大多數(shù)系統(tǒng)還會在這塊內(nèi)存空間中的首地址處記錄本次分配的大小,以便于delete語句正確釋放空間。而且,由于 找到的堆結(jié)點的大小不一定正好等于申請的大小,系統(tǒng)會自動將多余的那部分重新放入空閑鏈表。