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

C/C++ 筆試高頻題精選與標準答案

     編輯:關於C語言

基礎概念題

1. static 三大用法

  1. 函數內靜態區域變量:生命週期全程,僅初始化一次。
  2. 文件級 static 變量/函數:內部鏈接,僅本編譯單元可見。
  3. 類靜態成員:屬於類而非對象,需類外定義。

2. 引用 vs 指針

  • 引用必須初始化,綁定後不可改變指向;指針可為空、可改向。
  • 不存在空引用,但存在空指針。
  • 引用是別名,無自身記憶體(通常);指針有自身地址值。

3. 實時系統特徵

在確定時間內完成任務,核心指標:實時性(截止時間保證)與可靠性。

4. 全局 vs 區域變量記憶體

全局 → 靜態區(.data/.bss);區域 → 棧。

5. 平衡二叉樹(AVL)定義

左右子樹皆為 AVL,且高度差絕對值 ≤ 1。

6. 棧溢出成因

遞歸過深、大型區域數組、未釋放資源(實際指棧耗盡,非堆洩漏)。

7. 建構子不可為 virtual

建構時對象類型尚未確定,vptr 未初始化,無法動態派發。

8. 冒泡排序時間複雜度

O(n²)。

9. float 比較零值

if (fabs(x) < 1e-6)  // 或 x > -EPS && x < EPS

10. TCP/IP 五層模型

應用層 → 傳輸層 → 網絡層 → 數據鏈路層 → 物理層。

11. MAC ↔ IP 轉換協議

ARP(Address Resolution Protocol)。

12. IP 地址結構

網絡號 + 主機號,需配合子網掩碼按位與區分。

13. 約瑟夫環(M,N 報數出列)

循環鏈表 + 取模運算實現。

14. switch 不接受類型

浮點型(float/double)。

代碼題

1. 運算符副作用陷阱

int a = 4;
a += (a++);   // 未定義行為(C++17 前)
a += (++a);   // 未定義行為
(++a) += a;   // 合法,a=11

結論:單一序列點多次修改同一變量 → 未定義行為,面試答「未定義」最安全。

2. sizeof 經典考點(32 位系統)

char str[] = "https://www.ibegroup.com/"; // 含 \0 共 28 字節
char *p = str;
int n = 10;

sizeof(str)  // 28 (數組大小)
sizeof(p)    // 4  (指針大小)
sizeof(n)    // 4  (int 大小)

void Foo(char str[100]) {
    sizeof(str)  // 4  (退化為指針)
}

void *p = malloc(100);
sizeof(p)    // 4  (指針大小,非分配大小)

3. 預處理/鏈接/調用慣例

  • #ifndef/define/endif:防頭文件重複包含
  • <> 找系統路徑,"" 找當前目錄再找系統路徑
  • extern "C":解決 C++ name mangling 導致的 C 函數鏈接失敗
  • switch 不接受浮點型

4. 指針參數陷阱三連問

(1) void GetMemory(char **p, int n) { *p = malloc(n); }
    void Test() { char *s=NULL; GetMemory(&s,100); strcpy(s,"hello"); printf(s); }
    // 輸出 hello ✓

(2) void Test() { char *s=malloc(100); strcpy(s,"hello"); free(s);
    if(s!=NULL) { strcpy(s,"world"); printf(s); } }
    // 輸出 world(野指針訪問,未定義行為,碰巧內存未覆蓋)

(3) char *GetMemory() { char p[]="hello world"; return p; }
    // 返回棧上數組地址 → 野指針,輸出亂碼/崩潰

5. 手寫 strcat

char* strcat(char* dst, const char* src) {
    char* p = dst;
    while (*p) p++;
    while (*p++ = *src++);
    return dst;  // 返回原指針支援鏈式:strcat(strcat(a,b),c)
}

6. CString 型別安全

不安全。轉換用 Format、構造函數或 (LPCTSTR) 強轉。

7. 模板類優勢

  1. 動態增減的數據結構(如 vector)
  2. 型別無關 → 高復用
  3. 編譯期型別檢查 → 型別安全
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved