C 面試題集(一)

2021-09-30 09:07:22 字數 1714 閱讀 9780

1. c++中指標的優缺點有哪些

答案:優點:

(1)提高程式的編譯效率和執行速度。

(2)通過指標可使用主調函式和被調函式之間共享變數或資料結構,便於實現雙向資料通訊。

(3)可以實現動態的儲存分配。

(4)便於表示各種資料結構,編寫高質量的程式。

缺點:(1)使用未正確初始化的指標導致程式崩潰

(2)引用已釋放的指標

(3)通過指標訪問不該訪問的記憶體

2. 巨集和函式的區別

答案:(1)巨集做的是簡單的字串替換(注意是字串的替換,不是其他型別引數的替換),而函式的引數的傳遞,引數是有資料型別的,可以是各種各樣的型別。

(2)巨集的引數替換是不經計算而直接處理的,而函式呼叫是將實參的值傳遞給形參,是計算得來的。

(3)巨集在編譯之前進行,即先用巨集體替換巨集名,然後再編譯的,而函式是編譯之後,在執行時,才呼叫的。因此,巨集占用的是編譯的時間,而函式占用的是執行時的時間。

(4)巨集的引數是不佔記憶體空間的,因為只是做字串的替換,而函式呼叫時的引數傳遞則是具體變數之間的資訊傳遞,形參作為函式的區域性變數,是占用記憶體的。

(5)函式的呼叫是需要付出一定的時空開銷的,因為系統在呼叫函式時,要保留現場,然後轉入被呼叫函式去執行,呼叫完,再返回主調函式,此時再恢復現場,這些操作,顯然在巨集中是沒有的。

3. 巨集定義是什麼時期處理的(預處理?編譯期?)

答案:預處理

4. 不同情況下類物件的大小(有資料成員,無資料成員,有虛函式等)

答案:(1)無任何資料成員和虛函式的類大小為1

(2)每個虛函式大小為4

(3)成員變數大小要考慮記憶體對齊,通常是4位元組對齊

5. stl中vector使用的時候要注意什麼

答案:(1) 如果元素是物件的指標,當該vector超出其作用域或呼叫erase刪除元素時,那麼元素本身在該vector中會被刪除,但物件本身並沒有得到銷毀。在這種情況下,銷毀的工作要由程式設計師自己來做。

(2) 用erase刪除vector容器中的元素物件時,元素物件的析構函式會被多次呼叫。

6. 字元轉整型數的函式是什麼? 是怎樣實現的?

答案:strtol、strtoul。

#define tolower(x) ((x) | 0×20)

#define isxdigit(c) ((』0′ <= (c) && (c) <= 』9′) \

|| (『a』 <= (c) && (c) <= 『f』) \

|| (『a』 <= (c) && (c) <= 『f』))

#define isdigit(c) (』0′ <= (c) && (c) <= 』9′)

unsigned long strtoul(const char *cp,char **endp,unsigned int base)

}} else if (base == 16)

while (isxdigit(*cp) &&

(value = isdigit(*cp) ? *cp-』0′ : tolower(*cp)-』a'+10) < base)

if (endp)

*endp = (char *)cp;

return result;

}long strtol(const char *cp,char **endp,unsigned int base)

int32s atoi(const int8s *nptr)//

華為C語言面試題集

華為c語言面試題集c語言面試題 華為c語言面試題 深圳華為面試 c語言面試題 1 區域性變數能否和全域性變數重名?答 能,區域性會遮蔽全域性。要用全域性變數,需要使用 區域性變數可以與全域性變數同名,在函式內引用這個變數時,會用到同名的區域性變數,而不會用到全域性變數。對於有些編譯器而言,在同乙個函...

C 面試題(一)

記憶體管理 記憶體的分配方式 答 分配方式有三種,1 靜態儲存區,是在程式編譯時就已經分配好的,在整個執行期間都存在,如全域性變數 常量。2 棧上分配,函式內的區域性變數就是從這分配的,但分配的記憶體容易有限。3 堆上分配,也稱動態分配,如我們用new,malloc分配記憶體,用delete,fre...

C 面試題(一)

1.介紹一下stl,詳細說明stl如何實現vector。answer stl 標準模版庫,standard template library 它由容器演算法迭代器組成。stl有以下的一些優點 可以方便容易地實現搜尋資料或對資料排序等一系列的演算法 除錯程式時更加安全和方便 即使是人們用stl在uni...