考一考你們!c語言三道經典面試題

考一考你們!c語言三道經典面試題

題一,sizeof 和 strlen 有何區別?

題一參考答案:

sizeof 是一個操作符,strlen 是庫函數。

sizeof 的參數可以是數據的類型,也可以是變量,而 strlen 只能以結尾為‘\0‘的字符串作參數。

編譯器在編譯時就計算出了sizeof 的結果。而 strlen 函數必須在運行時才能計算出來。並且sizeof計算的是數據類型佔內存的大小,而 strlen 計算的是字符串實際的長度。

數組做sizeof 的參數不退化,傳遞給 strlen 就退化為指針了。

注意:有些是操作符看起來像是函數,而有些函數名看起來又像操作符,這類容易混淆的名稱一定要加以區分,否則遇到數組名這類特殊數據類型作參數時就很容易出錯。最容易混淆為函數的操作符就是sizeof。

題二, strcpy、sprintf 與 memcpy 有啥區別?

題二參考答案:

三者主要有以下不同之處:

操作對象不同,strcpy 的兩個操作對象均為字符串,sprintf 的操作源對象可以是多種數據類型,目的操作對象是字符串,memcpy 的兩個對象就是兩個任意可操作的內存地址,並不限於何種數據類型。

執行效率不同,memcpy 最高,strcpy 次之,sprintf 的效率最低。

實現功能不同,strcpy 主要實現字符串變量間的拷貝,sprintf 主要實現其他數據類型格式到字符串的轉化,memcpy 主要是內存塊間的拷貝。

說明:strcpy、sprintf 與memcpy都可以實現拷貝的功能,但是針對的對象不同,請根據實際需求,來選擇合適的函數實現拷貝功能。

題三,鏈表和數組有何區別?

題三參考答案:

數組和鏈表有以下幾點不同:

(1)存儲形式:數組是一塊連續的空間,聲明時就要確定長度。鏈表是一塊可不連續的動態空間,長度可變,每個結點要保存相鄰結點指針。

(2)數據查找:數組的線性查找速度快,查找操作直接使用偏移地址。鏈表需要按順序檢索結點,效率低。

(3)數據插入或刪除:鏈表可以快速插入和刪除結點,而數組則可能需要大量數據移動。

(4)越界問題:鏈表不存在越界問題,數組有越界問題。

說明:在選擇數組或鏈表數據結構時,一定要根據實際需要進行選擇。數組便於查詢,鏈表便於插入刪除。數組節省空間但是長度固定,鏈表雖然變長但是佔了更多的存儲空間。

在此給大家一個信號,C++和C都是很有前途的,不要懷疑。既然選擇了一門語言,就要堅持踏實的學下去,不要有任何猶豫,有沒有用就看自己學的怎麼樣,而不是語言本身的問題


分享到:


相關文章: