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

C 語言基礎完整指南:從 Hello World 到指標、結構體、遞迴與記憶體模型

     編輯:關於C語言

C 語言基礎完整指南:從 Hello World 到指標、結構體、遞迴與記憶體模型

本文系統整理 C 語言核心觀念,適合初學者建立完整知識骨架,也可作為複習速查。涵蓋基本資料型別、運算式、控制結構、陣列、字串、函式、結構體/聯合體/列舉、指標與記憶體管理。

Part 1:基本資料型別與運算式

1.1 變數三要素

  • 宣告/定義: int age; 向記憶體申請空間
  • 指派: age = 30; 修改變數值
  • 使用: printf("%d", age); 或 age = age + 1;

1.2 基本型別大小(視平台而定,以 64 位 Linux 為例)

型別關鍵字位元數位元組數範圍/精度
短整數short162-32,768 ~ 32,767
整數int324-2,147,483,648 ~ 2,147,483,647
長整數long648-9e18 ~ 9e18
單精度浮點float3246~7 位有效數字
雙精度浮點double64815~16 位有效數字
字元char81ASCII 0~255

使用 sizeof(type) 或 sizeof(var) 查看實際佔用位元組數。

1.3 進制轉換與自動型別轉換

  • 常用進制:二進制、八進制(前綴 0)、十進制、十六進制(前綴 0x)。
  • 隱性轉換:char → short → int → long → float → double 方向安全;反方向可能截斷精度。

1.4 常見運算子

  • 算術: + - * / % ++ --
  • 關係: == != > < >= <=
  • 邏輯: && || !
  • 位元: & | ^ ~ << >>
  • 指派: = += -= *= /= %=
  • 其他: sizeof (type) ?: ,(逗號運算子)

Part 2:程式控制結構

2.1 輸入/輸出基礎

  • printf("格式", ...)、scanf("格式", &var)
  • 格式字串:%d %f %c %s %p %x 等,可加旗標、寬度、精度。
  • putchar(c)、getchar() 處理單一字元。

2.2 選擇結構

if (cond1) { ... }
else if (cond2) { ... }
else { ... }

switch (expr) {
    case 1: ... break;
    case 2: ... break;
    default: ... }

2.3 迴圈結構

型別語法適用情境
whilewhile (cond) { ... }次數未知,先判斷再執行
do-whiledo { ... } while (cond);至少執行一次
forfor (init; cond; step) { ... }次數已知或可計算
  • break 跳出迴圈,continue 跳過本次迴圈。
  • 多層迴圈跳出可用 goto label;(慎用)。

Part 3:進階資料型別

3.1 陣列

  • 宣告:int arr[10] = {1,2,3}; 未初始化元素為 0(靜態/全域)或不定值(區域)。
  • 記憶體連續儲存,下標從 0 起算,務必防止越界。
  • 二維陣列 int a[3][4] 以列優先(Row-major)連續儲存。
  • 常見演算法:最大/最小值、平均、搜尋、刪除(前移)、插入(後移)、複製/合併(memcpy)。

3.2 字串

  • 本質:以 \0 結尾的字元陣列。"Hello" 長度 5,佔 6 位元組。
  • 常用函式(<string.h>):
    • strcpy/strncpy 複製(注意緩衝區溢位)
    • strcat/strncat 串接
    • strcmp 比較(相等回 0)
    • strlen 長度(不含 \0),sizeof 為編譯期陣列大小

3.3 函式

  • 定義:回傳型別 名稱(參數列表) { ... }
  • 宣告(原型):在呼叫前出現,或置於標頭檔。
  • 傳值呼叫: 形參為實參副本,函式內修改不影響外部。
  • 陣列做參數實為指標,修改內容會影響原陣列,需額外傳遞長度。
  • 遞迴: 函式呼叫自身,必須有基底條件與遞迴出口,否則堆疊溢位。
  • 儲存類別:auto(區域預設)、static(靜態存活、檔案/函式作用域)、extern(跨檔案連結)、register(建議暫存器)。

3.4 結構體、聯合體、列舉、Typedef

  • 結構體: struct Student { int no; char name[20]; }; 封裝異質資料。傳遞建議用指標避免複製開銷。
  • 聯合體: union { int i; float f; }; 共用記憶體,同一時間只有一個成員有效值。
  • 列舉: enum Week {Mon, Tue, ...}; 具名常數,增強可讀性。
  • Typedef: typedef struct Student Student; 建立型別別名。

3.5 指標

  • 指標變數儲存位址:int *p = &a;,*p 取值/修改值。
  • 指標運算:p+1 移動 sizeof(*p) 位元組;同陣列指標相減得元素數。
  • const int *p(指向常數)、int *const p(常數指標)、const int *const p(雙重常數)。
  • 函式指標:void (*callback)(int); 實作回呼/事件驅動。
  • void*: 通用指標,需強制轉型後使用。

記憶體模型總覽

區域內容生命週期管理方式
程式碼區機器指令程式執行期間唯讀
資料區全域/靜態變數、字面常數程式啟動~結束靜態配置
堆疊區域變數、參數、回傳位址函式呼叫~返回自動配置/釋放 (LIFO)
堆積動態配置 malloc/free程式設計師控制手動管理

💡 學習建議: 多動手寫小程式驗證每個觀念(特別是指標與記憶體),善用除錯器觀察記憶體佈局與呼叫堆疊,將抽象概念具象化。

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