首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

12 道 C 語言經典面試題:指標、進程、運算、結構體、函數、記憶體

     編輯:關於C語言

12 道 C 語言經典面試題:指標、進程、運算、結構體、函數、記憶體

精選 12 道高頻 C 語言面試題,涵蓋核心知識點,附詳細解析與陷阱提示。

題目列表

  1. 指標算術:int a[5]={1,2,3,4,5}; int *p=a; printf("%d", *(p+3)-*p); 輸出?
  2. 結構體對齊:struct {char c; int i;} s; sizeof(s)=? 32/64 位差異?
  3. 函數棧幀:遞歸函數 f(n){if(n>0) f(n-1);} 最大深度受何限制?
  4. 位欄:struct {int a:3; int b:4;}; 記憶體佈局與跨平台風險?
  5. volatile:何時必須用 volatile?編譯器優化行為如何變化?
  6. 進程 vs 執行緒:fork() 返回值在父/子進程?vfork() 差異?
  7. 記憶體洩漏檢測:Valgrind 原理?malloc/free 配對原則?
  8. 未定義行為:i = i++ + ++i; 結果?為何 UB?
  9. const 指標:const int *p vs int *const p vs const int *const p 區別?
  10. 函數指標:聲明「接受 int 返回函數指標的函數指標」型別?
  11. 大端/小端檢測:寫一段程式碼判斷當前機器位序。
  12. 柔性陣列:struct {int len; char data[];} 用途與 malloc 計算?

參考答案與解析

點擊展開答案
  1. 3:p+3 指向 a[3]=4,*p=1,4-1=3。
  2. 8 (32/64 位同):char 1B + 3B padding + int 4B = 8B。結構體對齊到最大成員 (4)。
  3. 棧大小 (通常 8MB Linux, 1MB Windows)。尾遞歸優化可消除棧增長。
  4. 位欄分配順序、跨單元、有符號性由實現定義。不可用於硬體暫存器映射,需用位運算。
  5. 硬體暫存器映射、訊號處理器變數、多執行緒共享旗標。禁止編譯器緩存/重排。
  6. fork():父進程返回子 PID,子進程返回 0。vfork():子進程共享父進程位址空間,子進程先執行,調用 exec 或 _exit 前父進程阻塞。
  7. Valgrind 透過動態二進制插桩追蹤所有分配/釋放。原則:誰分配誰釋放,free(NULL) 安全,重複 free 崩潰。
  8. UB:C 標準未定義修改同一變數兩次且無序列點。結果隨編譯器/優化等級異常。
  9. const int *p:指向常量整數 (值不可變);int *const p:常量指標 (指標不可變);const int *const p:雙重常量。
  10. int (*(*fp)(int))(void); 或 typedef int (*FuncPtr)(void); FuncPtr (*fp)(int);。
  11. union {int i; char c[4];} u = {.i=0x01020304}; return u.c[0]==1 ? "little" : "big";。
  12. 柔性陣列成員 (C99) 必須是結構體最後一員,malloc(sizeof(Struct) + len) 一次分配,提高局部性、減少碎片。

面試加分技巧

  • 回答時畫記憶體佈局圖(棧/堆/數據段/代碼段)。
  • 主動提及「未定義行為」「實現定義行為」區別。
  • 說出編譯器優化對 volatile/restrict 的影響。
  • 熟悉 __builtin_*、static_assert、C11 _Atomic 現代特性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved