C语言面试题分享(2)
一、sizeof 和 strlen 有何區別?
分析:
sizeof 是一個操作符,strlen 是庫函數。
sizeof 的參數可以是數據的類型,也可以是變量,而 strlen 只能以結尾為‘\0‘的字符串作參數。
編譯器在編譯時就計算出了sizeof 的結果。而 strlen 函數必須在運行時才能計算出來。并且sizeof計算的是數據類型占內存的大小,而 strlen 計算的是字符串實際的長度。
數組做sizeof 的參數不退化,傳遞給 strlen 就退化為指針了。
二、strcpy、sprintf 與 memcpy 有啥區別?
操作對象不同,strcpy 的兩個操作對象均為字符串,sprintf 的操作源對象可以是多種數據類型,目的操作對象是字符串,memcpy 的兩個對象就是兩個任意可操作的內存地址,并不限于何種數據類型。
執行效率不同,memcpy 最高,strcpy 次之,sprintf 的效率最低。
實現功能不同,strcpy 主要實現字符串變量間的拷貝,sprintf 主要實現其他數據類型格式到字符串的轉化,memcpy 主要是內存塊間的拷貝。
三、鏈表和數組有何區別?
(1)存儲形式:數組是一塊連續的空間,聲明時就要確定長度。鏈表是一塊可不連續的動態空間,長度可變,每個結點要保存相鄰結點指針。
(2)數據查找:數組的線性查找速度快,查找操作直接使用偏移地址。鏈表需要按順序檢索結點,效率低。
(3)數據插入或刪除:鏈表可以快速插入和刪除結點,而數組則可能需要大量數據移動。
(4)越界問題:鏈表不存在越界問題,數組有越界問題。
總結
以上是生活随笔為你收集整理的C语言面试题分享(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32的时钟配置——时钟树解析
- 下一篇: C语言面试题分享(3)