從 Java 轉學 C 語言,首要任務是理解程式結構、編譯模型與基礎語法差異。本文透過三個漸進式範例,建立 C 語言程式架構的直觀認知。
#include "stdio.h" /* 預處理指令:引入標準輸入輸出庫 */
main() { /* 主函數:程式唯一入口點 */
printf("test"); /* 函數呼叫:輸出到標準輸出 */
}
Main ≠ mainmain/* ... */ (C89 標準),C99 新增 // 單行註解
#include "stdio.h"
main() {
float r, l, area; /* 宣告 float 變數 */
scanf("%f", &r); /* 讀取鍵盤輸入,& 為取址運算子 */
l = 2 * 3.14 * r;
area = 3.14 * r * r;
printf("\n l=%f, area=%f\n", l, area);
}
float r, l, area;:變數在執行期可改變值float:資料類型,告訴編譯器配置多少記憶體、如何解讀位元scanf("%f", &r):&r 取得變數記憶體位址,讓 scanf 能寫入值printf 格式字串 %f 對應 float/double
#include "stdio.h"
main() {
int i, j, sum;
int Add(int m, int n); /* 函數原型宣告 */
scanf("%d %d", &i, &j);
sum = Add(i, j); /* 函數呼叫 */
printf("\n sum=%d \n", sum);
}
int Add(int m, int n) { /* 函數定義 */
return m + n;
}
int Add(int m, int n); 告訴編譯器函數簽名Add(i, j) 傳遞實參,獲得返回值# 開頭為預處理指令 (include、define、ifdef 等)count ≠ Count ≠ COUNT| Java | C | 影響 |
|---|---|---|
| 自動記憶體管理 (GC) | 手動 malloc/free | 記憶體洩漏、懸空指標風險 |
| 類別為核心單位 | 函數為核心單位 | 程式設計範式差異 |
| 陣列有邊界檢查 | 指標運算無邊界檢查 | 緩衝區溢位風險 |
| 字串為物件 | 字串為 char 陣列 + '\0' | 字串操作需自管記憶體 |
| 例外處理 try/catch | 返回碼 + errno | 錯誤處理更分散 |
掌握 C 的程式結構、編譯模型與記憶體模型,是進入系統程式設計、嵌入式開發、高效能運算領域的敲門磚。