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

C 語言基礎知識點大彙總:流、宏、指針、內存操作與標準庫精華

     編輯:關於C

前言:基礎不牢,地動山搖

最近研讀《C語言常見問題》,發現許多「懂得都懂」的基礎知識卻極易踩坑。古云「不積跬步,無以至千里」,特整理核心考點分享,助力夯實基本功。

一、流的概念與分類

  • 文本流:解釋性,行尾轉換(\n ⇄ \r\n),單行 ≤ 255 字符。
  • 二進制流:非解釋性,逐字節處理,無長度限制。

二、#include 的靈活性

不限於 .h 後綴,可包含任意文本文件(如 .inc、.def),本質是文本替換。

三、宏 vs 函數:選型原則

場景推薦理由
微小、高頻、可重複代碼片段宏展開零開銷,極致速度
邏輯複雜、多行、需類型安全、調試友好函數可讀性、維護性、類型檢查
極度追求代碼體積函數避免代碼膨脹

四、strcpy vs memcpy

  • strcpy:僅限字符串(以 \0 結尾),遇 \0 停止。
  • memcpy:任意類型內存塊拷貝,需指定長度,不關心內容。

五、整數 ⇄ 字符串轉換

  • itoa(int, char*, radix):整數 → 字符串(非標準但廣泛支持)。
  • atoi(const char*):字符串 → 整數(標準庫)。

六、空指針 vs void 指針:本質區別

  • 空指針:值為 NULL(0 或 (void*)0),不指向任何對象。
  • void 指針:指向具體對象,但類型未知(通用指針),需轉型後解引用。

七、NULL 的真相

  • 定義:0 或 (void*)0,二者幾乎等價。
  • NULL == 0 為真(比較語義)。
  • 但 存儲表示不一定全 0 位模式(如某些架構指針非全零表示空),不可 memset(ptr, 0, ...) 當作賦 NULL。

八、指針作條件判斷

if (ptr) 等價於 if (ptr != NULL)。兩指針不可相加(無意義),只能相減得 ptrdiff_t。

九、void 函數與 return

  • void 函數無返回值,可省略 return。
  • 但遇嚴重錯誤需提前退出時,必須显式 return 跳過後續代碼。

十、exit() vs return

  • exit():終止整個進程,控制權交還 OS。
  • return:從當前函數返回,控制權交還調用者。

十一、數組下標與地址

  • 下標恆從 0 開始。
  • 允許取 &arr[n](尾後一元素地址),嚴禁解引用。

十二、array_name vs &array_name

  • arr:類型 T*,指向首元素。
  • &arr:類型 T(*)[N],指向整個數組,+1 跨越整個數組大小。

十三、標準庫函數三大優勢

  1. 準確性:經海量測試、邊界情況覆蓋完善。
  2. 高效性:針對架構優化(SIMD、內聯、分支預測)。
  3. 可移植性:跨平台一致行為,免除重複造輪子。

十四、Locale(本地環境)

描述特定區域的程序運行規則(字符集、貨幣、日期格式等),是國際化(i18n)基石。

總結

基礎知識如水、山、雲,看似平常卻支撐一切上層建築。建議定期回顧,將「知道」轉化為「肌肉記憶」,在實戰中自然避開陷阱。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved