1. C 和 C++ 區別
2. const 有什么用途
主要有三點:
1:定義只讀變量,即常量
2:修飾函數的參數和函數的返回值
3: 修飾函數的定義體,這里的函數為類的成員函數,被const修飾的成員函數代表不修改成員變量的值
3. 指針和引用的區別
1:引用是變量的一個別名,內部實現是只讀指針
2:引用只能在初始化時被賦值,其他時候值不能被改變,指針的值可以在任何時候被改變
3:引用不能為NULL,指針可以為NULL
4:引用變量內存單元保存的是被引用變量的地址
5:“sizeof 引用" = 指向變量的大小 , "sizeof 指針"= 指針本身的大小
6:引用可以取地址操作,返回的是被引用變量本身所在的內存單元地址
7:引用使用在源代碼級相當於普通的變量一樣使用,做函數參數時,內部傳遞的實際是變量地址
4. C++中有了malloc / free , 為什么還需要 new / delete
1,malloc與free是C++/C語言的標准庫函數,new/delete是C++的運算符。它們都可用於申請動態內存和釋放內存。 2,對於非內部數據類型的對象而言,光用maloc/free無法滿足動態對象的要求。 對象在創建的同時要自動執行構造函數,對象在消亡之前要自動執行析構函數。 由於malloc/free是庫函數而不是運算符,不在編譯器控制權限之內,不能夠把執行構造函數和析構函數的任務強加於malloc/free。 3,因此C++語言需要一個能完成動態內存分配和初始化工作的運算符new,以一個能完成清理與釋放內存工作的運算符delete。注意new/delete不是庫函數。
5. 編寫類String 的構造函數,析構函數,拷貝構造函數和賦值函數
6. 多態的實現
7. 單鏈表的逆置
8. 堆和棧的區別
一個由c/C++編譯的程序占用的內存分為以下幾個部分 1、棧區(stack)― 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似於數據結構中的棧。 2、堆區(heap) ― 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收 。 注意它與數據結構中的堆是兩回事,分配方式倒是類似於鏈表,呵呵。 3、全局區(靜態區)(static)―,全局變量和靜態變量的存儲是放在一塊的, 初始化的全局變量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。 - 程序結束后有系統釋放 4、文字常量區 ―常量字符串就是放在這里的。 程序結束后由系統釋放 5、程序代碼區―存放函數體的二進制代碼。
10. 不調用C/C++ 的字符串庫函數,編寫strcpy
char * strcpy(char * strDest,const char * strSrc) { if ((strDest==NULL)||(strSrc==NULL)) return NULL; char * strDestCopy=strDest; while ((*strDest++=*strSrc++)!='\0'); *strDest = '\0'; return strDestCopy; }