學c注意事項
我寫了很多服務器的代碼,我怕有些人看不懂所以就寫了這篇入門篇。
學習c語言要多動手,多練習,其實語法就幾個,你了解了就會寫出自己想要的代碼,你不要怕不會寫不出程序,因為大部分代碼都有人寫好,你去github和csdn會抄就行,前提是你會讀懂c代碼而且要知道編譯流程和代碼邏輯即可
第一步安裝編譯環境,建議裝qt,c和c++相互兼容的所以別擔心。可以csdn找一個qt安裝鏈接下載,別擔心裝錯,裝錯還能卸載的,學習要放下心理負擔,勇于嘗試。
c就幾個點,內存,地址,結構體,函數,數據類型,循環,判斷語句,寫起來就像拼積木一樣,一層層建起來
1. C語言是個啥?為啥要學它?
簡單來說,咱們人跟人嘮嗑,用的是中文、英文這些"自然語言"。那想讓電腦聽咱們的話,干活呢?就得用"計算機語言"。
C語言,就是眾多計算機語言里的一位"老前輩"(誕生于上世紀70年代!),但絕對是"老當益壯"!
為啥推薦你學?
- 根基牢固: 很多流行的語言(C++, Java, Python等)都跟它有血緣關系。學好C,能幫你理解計算機底層是怎么跑的(比如內存怎么玩),以后學別的語言也更快。
- 運行賊快: C語言執行效率高,像操作系統(Windows/Linux核心)、游戲引擎、單片機(你的智能手表里可能就有)這些追求速度的地方,都少不了它。
- 面試加分: 不少大廠面試,還會問C語言基礎,考察你的計算機功底。
總之,學C不虧,入門不難!
2. 來,整一個!你的第一個C程序
學習編程的"國際慣例",就是先讓電腦說"Hello"。這能幫你快速檢查環境搭好沒,順便熟悉下C代碼長啥樣。
“Hello, World!” 代碼 (hello.c
)
// 這是一個注釋,告訴我們下面這行是干啥的
#include <stdio.h> // 告訴編譯器:我要用標準輸入輸出庫里的東西// 每個C程序都從這里開始跑,這是"主干道"!
int main() {// 這句話就是讓電腦在屏幕上打印 "Hello, C Language!"// printf 是一個現成的"喇叭"函數,專門用來輸出信息printf("Hello, C Language!\n"); // \n 的意思是說完這句話換個行// 程序順利跑完,告訴操作系統"一切OK",返回0return 0;
}
代碼大白話解釋:
#include <stdio.h>
:像是在說:“喂,編譯器老兄,幫我把那個叫 stdio.h 的工具箱(頭文件)拿過來,里面有我待會兒要用的工具(比如 printf)。”int main() { ... }
:這就是程序的"啟動按鈕"和"主舞臺" (main 函數)。電腦拿到你的代碼,第一個就找 main,然后從 { 開始,一句一句往下執行,直到 } 結束。int
表示這個 main 舞臺劇表演完,會給出一個整數作為"演出評分"(return 0
就是"完美落幕"的意思)。printf("Hello, C Language!\n");
:這就是演出的核心內容——調用 printf 這個"大喇叭",把雙引號 “” 里的內容喊出來。\n
是個特殊暗號,告訴喇叭喊完記得換行,別粘在下一句了。別忘了最后那個分號;
,它就像中文的句號,告訴編譯器:“這句話說完了!”return 0;
:演出結束,謝幕,給個好評(返回0)。
怎么讓它跑起來?(編譯和運行)
你需要一個C語言編譯器(比如 GCC)。在你的終端或命令行里:
編譯 (把代碼翻譯成電腦能懂的機器碼):
建議用編譯器編譯,比如qt簡單快捷不用手戳,下面這個是Linux的看看就好
gcc hello.c -o hello
gcc
: 喊一下編譯器大佬。hello.c
: 告訴它你的劇本(源代碼)是哪個文件。-o hello
: 讓它把翻譯好的執行文件(程序)取名叫 hello (Windows 下可能會自動變成 hello.exe)。
運行 (讓程序跑起來):
- Linux / macOS:
./hello
- Windows:
hello
或.\hello.exe
如果一切順利,你屏幕上就會出現:
Hello, C Language!
“Hello, World!” 流程圖
graph TDA[開始] --> B(引入 stdio.h 工具箱);B --> C{進入 main 函數主舞臺};C --> D[用 printf 喇叭喊出 "Hello, C Language!" 并換行];D --> E[演出成功, 返回 0];E --> F[結束];
測試案例 1:
- 代碼: 上面的 hello.c
- 操作: 編譯并運行。
- 預期輸出: Hello, C Language!
耶!你已經成功和C語言打了個招呼!
3. 編程的積木:數據類型與變量
程序要處理各種各樣的數據,比如數字、字母。為了讓電腦知道怎么存、怎么用這些數據,C語言規定了不同的 數據類型 (Data Types)。
常見的"積木"類型:
int
:用來裝 整數 (integer),比如 1, 100, -5。float
:用來裝 帶小數點的數 (單精度浮點數),比如 3.14, -0.5。精度要求不高時用。double
:也是裝 帶小數點的數 (雙精度浮點數),比 float 裝得更精確,用的也更多。char
:用來裝 單個字符 (character),比如 ‘A’, ‘b’, ‘?’。注意要用 單引號 ’ ’ 括起來。
有了類型,我們就可以創建 變量 (Variables) 了。變量就像一個 帶標簽的盒子,你可以給盒子起個名字(變量名),并規定這個盒子只能裝哪種類型的數據。
創建變量(聲明變量):
數據類型 變量名; // 格式
例子:
int age; // 創建一個叫 age 的盒子,只能裝整數
float price; // 創建一個叫 price 的盒子,只能裝單精度小數
char grade; // 創建一個叫 grade 的盒子,只能裝單個字符
給變量裝東西(賦值 & 初始化):
// 先聲明,后賦值
int age;
age = 18; // 把 18 這個整數放進 age 盒子里// 聲明的同時就給個初始值(推薦!)
float price = 99.9f; // 把 99.9 放進 price 盒子里 (f表示這是個float)
char grade = 'A'; // 把 'A' 這個字符放進 grade 盒子里
double pi = 3.14159; // 把 3.14159 放進 pi 盒子里
變量名的規矩(命名規則):
- 只能用字母、數字、下劃線 _。
- 第一個字符不能是數字。
- 大小寫敏感 (age 和 Age 是兩個不同的盒子)。
- 不能用C語言的"保留字"(關鍵字,后面會說)做名字。
看看這些盒子占多大地方 (sizeof)
不同的數據類型,在電腦內存里占的空間大小(字節數)可能不一樣。我們可以用 sizeof
這個"尺子"來量一下。
測試案例 2:變量和它們的大小 (datatypes.c)
#include <stdio.h>int main() {int age = 25;float price = 19.9f;double salary = 5000.50;char initial = 'J';// 打印變量的值 (%d, %f, %lf, %c 是對應類型的"占位符")printf("年齡 (Age): %d\n", age);printf("價格 (Price): %.2f\n", price); // %.2f 表示保留2位小數printf("工資 (Salary): %lf\n", salary); // %lf 通常用于 doubleprintf("姓氏首字母 (Initial): %c\n", initial);printf("\n--- 看看它們占多大地方 (單位:字節) ---\n");// sizeof 返回的是 size_t 類型,用 %zd 來打印比較安全printf("int 占 %zd 字節\n", sizeof(int));printf("float 占 %zd 字節\n", sizeof(float));printf("double 占 %zd 字節\n", sizeof(double));printf("char 占 %zd 字節\n", sizeof(char));printf("變量 age 占 %zd 字節\n", sizeof(age)); // 也可以量變量本身return 0;
}
編譯運行: gcc datatypes.c -o datatypes
然后 ./datatypes
(或 datatypes.exe
)
預期輸出 (注意:具體大小可能因系統和編譯器略有不同,尤其是 int):
年齡 (Age): 25
價格 (Price): 19.90
工資 (Salary): 5000.500000
姓氏首字母 (Initial): J--- 看看它們占多大地方 (單位:字節) ---
int 占 4 字節 // 常見大小,也可能是2或8
float 占 4 字節
double 占 8 字節
char 占 1 字節
變量 age 占 4 字節 // 和 int 類型大小一樣
為什么要有不同大小的類型?
就像你寄快遞,寄個小戒指用小盒子,寄臺電視用大箱子。數據也一樣,存個小整數用 short
(短整型,比 int 可能更小),存很大的數可能要用 long long
(長長整型)。合理選擇類型,能更有效地利用內存空間。
流程圖:變量聲明、賦值、打印與測大小
4. 關鍵字:C語言的"保留字"
C語言里有一些單詞,被賦予了特殊的含義,它們是語言規則的一部分,我們不能把它們用作變量名或其他自定義的名字。這些就是 關鍵字 (Keywords) 或叫 保留字 (Reserved Words)。
比如我們已經見過的 int
, float
, char
, double
, return
都是關鍵字。還有一些控制流程的,比如 if
, else
, for
, while
等等。
C語言總共有幾十個關鍵字,你不需要一下子全記住! 隨著學習的深入,你會自然而然地認識它們。
常見的幾個:
- 數據類型相關:
int
,float
,double
,char
,void
,short
,long
,signed
,unsigned
,struct
,union
,enum
,typedef
,sizeof
- 流程控制相關:
if
,else
,switch
,case
,default
,for
,while
,do
,break
,continue
,goto
,return
- 存儲相關:
auto
,static
,register
,extern
,const
,volatile
重點: 看到這些詞,知道它們有特殊用途,別拿來當變量名就行!
5. 代碼的"句子":語句
我們的C程序,就是由一條條 語句 (Statements) 組成的,就像文章由一個個句子構成一樣。大部分語句都以分號 ;
結尾,表示一個指令的結束。
C語言里有幾種不同類型的"句子":
- 空語句 (Empty Statement): 就一個孤零零的分號
;
。它啥也不干,但語法上是合法的,有時在特定結構中會用到(現在先不用管)。
; // 這就是一條空語句
- 表達式語句 (Expression Statement): 一個表達式后面跟個分號。最常見的就是賦值操作。
age = 18; // 賦值表達式 + ; -> 表達式語句
price * 0.8; // 這個計算本身是個表達式,加上分號也是語句,雖然結果沒被使用
x++; // x自增,也是表達式語句 (等價于 x = x + 1;)
- 函數調用語句 (Function Call Statement): 調用一個函數,后面跟個分號。我們用
printf
就是典型的例子。
printf("Hello!\n"); // 調用printf函數 + ; -> 函數調用語句
scanf("%d", &age); // 調用scanf函數讀取輸入 (后面會學)
- 復合語句 (Compound Statement) / 代碼塊 (Block): 用一對花括號
{}
括起來的一堆語句。它在語法上被視為一條單獨的語句,常用于if
,while
,for
和函數定義中。
{ // 這是一個復合語句的開始int temp = 10;printf("臨時變量是: %d\n", temp);temp = temp + 5;
} // 復合語句結束
注意: 復合語句的末尾 不需要 再加分號。
- 控制語句 (Control Statement): 用來控制程序執行流程的,比如決定代碼走哪條路(if-else, switch),或者讓某段代碼重復執行(for, while, do-while),還有跳轉 (break, continue, goto, return)。這些是C語言的"導航系統",非常重要,我們后面會專門學。
簡單理解: 代碼就是一句一句(語句)往下執行的,分號是句號,花括號 {}
用來包一組句子形成一個段落(代碼塊)。
6. 讓代碼說話:注釋
代碼不僅是給電腦看的,更是給人(包括幾個月后的你自己!)看的。為了讓代碼更容易理解,我們可以添加 注釋 (Comments)。
注釋就像是代碼旁邊的"旁白"或"注解",編譯器會完全忽略它們,它們只為閱讀代碼的人服務。
為啥要寫注釋?
- 解釋復雜邏輯:“這段代碼是為了解決那個超難的bug…”
- 說明變量用途:“這個 isValid 變量是用來標記用戶輸入是否合法的…”
- 標記待辦事項:“// TODO: 這里需要加個錯誤處理”
- 暫時"屏蔽"代碼:測試時,可以把某段代碼注釋掉,暫時不讓它執行。
C語言注釋的兩種寫法:
- 單行注釋
//
: 從//
開始,一直到這行末尾,都是注釋。適合簡短的說明。
// 這是一整行注釋
int count = 0; // 這是跟在代碼后面的注釋,解釋 count 的初始值
- 多行注釋
/* ... */
: 從/*
開始,到*/
結束,中間的所有內容(可以跨越多行)都是注釋。適合大段的解釋或暫時屏蔽多行代碼。
/*這里可以寫好多好多行的注釋,詳細說明下面這個函數的功能、參數含義等等。
*/
int calculate_sum(int a, int b) {return a + b;
}/* 暫時把這段代碼注釋掉,以后可能還會用
if (error_occurred) {handle_error();
}
*/
測試案例 3:使用注釋 (comments.c)
#include <stdio.h>/** 程序名稱: 注釋示例* 功能: 演示兩種注釋的使用方法* 作者: [你的名字]* 日期: 2024-07-29*/
int main() {// 定義一個整數變量age,并初始化為18int age = 18;// 使用printf函數打印年齡printf("我的年齡是: %d\n", age); // 在屏幕上顯示年齡/*// 下面這行代碼被注釋掉了,所以不會執行printf("這行不會被打印出來。\n");*/// 程序正常結束return 0; // 返回0表示成功
}
編譯運行: gcc comments.c -o comments
然后 ./comments
(或 comments.exe
)
預期輸出:
我的年齡是: 18
(注意:被注釋掉的那行 printf 沒有輸出)
寫注釋的好習慣:
- 寫有意義的注釋,解釋"為什么"這么做,而不是簡單重復代碼"干了什么"。
- 保持注釋和代碼同步更新。
- 別寫太多廢話注釋。
7. 接下來學什么 & 推薦資源
恭喜你!你已經邁出了C語言學習的第一步,掌握了:
- C語言是啥
- 寫和運行第一個程序 (Hello, World)
- 基本的數據類型和變量
- 關鍵字的概念
- 語句和注釋
但這只是新手村!接下來,你可以繼續探索:
- 運算符: 加減乘除 (+ - * / %),比較大小 (> < == !=),邏輯判斷 (&& || !) 等。
- 輸入 (scanf): 如何從鍵盤讀取用戶輸入的數據。
- 控制流: if-else (如果…就…否則…),switch (多選一),for / while (重復執行/循環)。這些是讓程序"聰明"起來的關鍵!
- 數組: 一次性存儲多個同類型的數據(比如存一個班所有同學的成績)。
- 函數: 把代碼打包成可重用的模塊,讓程序更整潔。
- 指針: C語言的"核武器",直接操作內存地址,強大但也需要小心使用。
學習資源推薦
經典書籍 (適合靜心啃):
- 《C Primer Plus》 (第6版): 非常厚,但內容詳盡,講解細致,例子豐富,適合自學入門。★★★★★
- 《C程序設計語言》 (The C Programming Language, K&R): C語言之父寫的經典之作,非常精煉,但可能對純新手有點難度,適合有一定基礎后拔高