c語言初識

在這里插入圖片描述

學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 盒子里

變量名的規矩(命名規則):

  1. 只能用字母、數字、下劃線 _。
  2. 第一個字符不能是數字。
  3. 大小寫敏感 (age 和 Age 是兩個不同的盒子)。
  4. 不能用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 (長長整型)。合理選擇類型,能更有效地利用內存空間。

流程圖:變量聲明、賦值、打印與測大小

開始
聲明并初始化 int age
聲明并初始化 float price
聲明并初始化 double salary
聲明并初始化 char initial
打印各變量的值
使用 sizeof 測量 int, float, double, char 的大小
打印這些類型的大小
結束

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語言里有幾種不同類型的"句子":

  1. 空語句 (Empty Statement): 就一個孤零零的分號 ;。它啥也不干,但語法上是合法的,有時在特定結構中會用到(現在先不用管)。
; // 這就是一條空語句
  1. 表達式語句 (Expression Statement): 一個表達式后面跟個分號。最常見的就是賦值操作。
age = 18;          // 賦值表達式 + ; -> 表達式語句
price * 0.8;       // 這個計算本身是個表達式,加上分號也是語句,雖然結果沒被使用
x++;               // x自增,也是表達式語句 (等價于 x = x + 1;)
  1. 函數調用語句 (Function Call Statement): 調用一個函數,后面跟個分號。我們用 printf 就是典型的例子。
printf("Hello!\n"); // 調用printf函數 + ; -> 函數調用語句
scanf("%d", &age); // 調用scanf函數讀取輸入 (后面會學)
  1. 復合語句 (Compound Statement) / 代碼塊 (Block): 用一對花括號 {} 括起來的一堆語句。它在語法上被視為一條單獨的語句,常用于 if, while, for 和函數定義中。
{ // 這是一個復合語句的開始int temp = 10;printf("臨時變量是: %d\n", temp);temp = temp + 5;
} // 復合語句結束

注意: 復合語句的末尾 不需要 再加分號。

  1. 控制語句 (Control Statement): 用來控制程序執行流程的,比如決定代碼走哪條路(if-else, switch),或者讓某段代碼重復執行(for, while, do-while),還有跳轉 (break, continue, goto, return)。這些是C語言的"導航系統",非常重要,我們后面會專門學。

簡單理解: 代碼就是一句一句(語句)往下執行的,分號是句號,花括號 {} 用來包一組句子形成一個段落(代碼塊)。

6. 讓代碼說話:注釋

代碼不僅是給電腦看的,更是給人(包括幾個月后的你自己!)看的。為了讓代碼更容易理解,我們可以添加 注釋 (Comments)

注釋就像是代碼旁邊的"旁白"或"注解",編譯器會完全忽略它們,它們只為閱讀代碼的人服務。

為啥要寫注釋?

  • 解釋復雜邏輯:“這段代碼是為了解決那個超難的bug…”
  • 說明變量用途:“這個 isValid 變量是用來標記用戶輸入是否合法的…”
  • 標記待辦事項:“// TODO: 這里需要加個錯誤處理”
  • 暫時"屏蔽"代碼:測試時,可以把某段代碼注釋掉,暫時不讓它執行。

C語言注釋的兩種寫法:

  1. 單行注釋 //: 從 // 開始,一直到這行末尾,都是注釋。適合簡短的說明。
// 這是一整行注釋
int count = 0; // 這是跟在代碼后面的注釋,解釋 count 的初始值
  1. 多行注釋 /* ... */: 從 /* 開始,到 */ 結束,中間的所有內容(可以跨越多行)都是注釋。適合大段的解釋或暫時屏蔽多行代碼。
/*這里可以寫好多好多行的注釋,詳細說明下面這個函數的功能、參數含義等等。
*/
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 沒有輸出)

寫注釋的好習慣:

  1. 寫有意義的注釋,解釋"為什么"這么做,而不是簡單重復代碼"干了什么"。
  2. 保持注釋和代碼同步更新。
  3. 別寫太多廢話注釋。

7. 接下來學什么 & 推薦資源

恭喜你!你已經邁出了C語言學習的第一步,掌握了:

  • C語言是啥
  • 寫和運行第一個程序 (Hello, World)
  • 基本的數據類型和變量
  • 關鍵字的概念
  • 語句和注釋

但這只是新手村!接下來,你可以繼續探索:

  • 運算符: 加減乘除 (+ - * / %),比較大小 (> < == !=),邏輯判斷 (&& || !) 等。
  • 輸入 (scanf): 如何從鍵盤讀取用戶輸入的數據。
  • 控制流: if-else (如果…就…否則…),switch (多選一),for / while (重復執行/循環)。這些是讓程序"聰明"起來的關鍵!
  • 數組: 一次性存儲多個同類型的數據(比如存一個班所有同學的成績)。
  • 函數: 把代碼打包成可重用的模塊,讓程序更整潔。
  • 指針: C語言的"核武器",直接操作內存地址,強大但也需要小心使用。

學習資源推薦

經典書籍 (適合靜心啃):

  • 《C Primer Plus》 (第6版): 非常厚,但內容詳盡,講解細致,例子豐富,適合自學入門。★★★★★
  • 《C程序設計語言》 (The C Programming Language, K&R): C語言之父寫的經典之作,非常精煉,但可能對純新手有點難度,適合有一定基礎后拔高

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/80628.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80628.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/80628.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

請求參數、路徑參數、查詢參數、Spring MVC/FeignClient請求相關注解梳理

目錄 1 請求分類1.1 URL參數--查詢參數1.2 URL參數--路徑參數 2 請求相關注解2.1 RequestParam--查詢參數2.2 PathVariable--路徑參數2.3 RequestBody2.4 Param & RequestLine2.5 SpringMVC請求參數注解用在FeignClient里 使用SpringMVC處理http請求或使用FeignClient進行請…

智能指針之設計模式3

這次我們看一下智能指針是如何使用策略模式來釋放資源的&#xff0c;同時又是如何擴展功能&#xff0c;管理更多的資源對象類型的。 3、策略模式 策略模式作為一種軟件設計模式&#xff0c;指對象有某個行為&#xff0c;但是在不同的應用場景中&#xff0c;該行為有不同的實現…

華為盤古OS深度評測:構建AI自進化系統的實踐密碼

華為盤古OS通過分布式AI內核與自適應學習框架的深度耦合&#xff0c;重新定義操作系統級智能能力。實測顯示其AI任務調度效率較傳統系統提升17倍&#xff0c;本文從智能體編排、持續學習機制、端云協同架構三個維度&#xff0c;解析如何基于DevKit 3.0打造具備認知進化能力的下…

精益數據分析(28/126):解讀商業模式拼圖與關鍵指標

精益數據分析&#xff08;28/126&#xff09;&#xff1a;解讀商業模式拼圖與關鍵指標 在創業和數據分析的探索旅程中&#xff0c;每一次深入研究都可能帶來新的啟發和突破。今天&#xff0c;我們依舊帶著共同進步的初心&#xff0c;深入解讀《精益數據分析》中關于商業模式的…

GitLab Runner配置并行執行多個任務

檢查并修改方法&#xff1a; 打開 Runner 的配置文件&#xff08;通常位于 /etc/gitlab-runner/config.toml 或 ~/.gitlab-runner/config.toml&#xff09;。 確保 concurrent 值大于 1&#xff0c;例如&#xff1a; concurrent 4 # 允許最多 4 個任務同時運行重啟 Runner…

開發首個Spring Boot應用

&#x1f4cb; 前置條件 &#x1f3af; 在開始之前&#xff0c;請打開終端并運行以下命令以確保已安裝正確版本的 Java&#xff1a; $ java -version openjdk version "17.0.4.1" 2022-08-12 LTS OpenJDK Runtime Environment (build 17.0.4.11-LTS) OpenJDK 64-Bi…

【信息系統項目管理師】高分論文:論質量管理和進度管理(智慧旅游平臺建設項目)

更多內容請見: 備考信息系統項目管理師-專欄介紹和目錄 文章目錄 論文1、規劃質量管理2、質量保證3、質量控制論文 2019年3月,我作為項目經理,參加了某市智慧旅游平臺建設項目,負責項目的全面管理, 該項目以打造一流的國內外生態旅游城市為目標,旨在大數據云平臺建設的基…

DAM-3B,英偉達推出的多模態大語言模型

DAM-3B是什么 DAM-3B&#xff08;Describe Anything 3B&#xff09;是英偉達推出的一款多模態大語言模型&#xff0c;專門用于為圖像和視頻中的特定區域生成詳細描述。用戶可以通過點、邊界框、涂鴉或掩碼等方式來標識目標區域&#xff0c;從而得到精準且符合上下文的文本描述…

如何判斷你的PyTorch是GPU版還是CPU版?

如何判斷你的PyTorch是GPU版還是CPU版&#xff1f; PyTorch作為當前最流行的深度學習框架之一&#xff0c;支持在CPU和GPU(NVIDIA CUDA)上運行。對于深度學習開發者來說&#xff0c;正確識別PyTorch版本至關重要&#xff0c;因為GPU版本可以帶來10-100倍的性能提升。本文將全面…

Gin框架

Gin 快速入門 go get -u github.com/gin-gonic/gin package main import gin "github.com/gin-gonic/gin"func main() {engine : gin.Default()engine.GET("/", func(c *gin.Context) {c.String(200, "Hello Gin")})engine.Run(":8888&q…

【Project】基于spark-App端口懂車帝數據采集與可視化

文章目錄 hadoop完全分布式部署hdfs-site.xmlcore-site.xmlmarpred-site.xmlyarn-site.xml spark集群部署spark-env.sh mongodb分片模式部署config 服務器初始化config 副本集 shard 服務器初始化shard 副本集 mongos服務器添加shard設置chunk大小 啟動分片為集合 user 創建索引…

brew 安裝openjdk查看其版本

使用brew&#xff08;如果你使用Homebrew安裝&#xff09; 如果你通過Homebrew安裝了OpenJDK&#xff0c;可以使用以下命令來查看安裝的版本,&#xff1a; brew list --versions openjdk8 這將會列出所有通過Homebrew安裝的OpenJDK版本及其版本號。 3. 查看/usr/libexec/ja…

【Linux網絡】構建與優化HTTP請求處理 - HttpRequest從理解到實現

&#x1f4e2;博客主頁&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客倉庫&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;歡迎點贊 &#x1f44d; 收藏 ?留言 &#x1f4dd; 如有錯誤敬請指正&#xff01; &…

Day12(回溯法)——LeetCode51.N皇后39.組合總和

1 前言 今天刷了三道回溯法和一道每日推薦&#xff0c;三道回溯法也迷迷糊糊的&#xff0c;每日推薦把自己繞進去了&#xff0c;雖然是一道之前做過的題的變種。刷的腦子疼。。。今天挑兩道回溯題寫一下吧&#xff0c;其中有一道是之前做過的N皇后&#xff0c;今天在詳細寫一寫…

初階數據結構:二叉搜索樹

目錄 概念 性能 效率分析 二分缺陷 功能 插入 查找 刪除 實現 應用 概念 二叉搜索樹&#xff08;又稱&#xff1a;二叉排序樹&#xff09;&#xff0c;是由一些具有特別性質的二叉樹衍變而來。 只要一棵二叉樹具備以下性質&#xff0c;即可稱作二叉搜索樹。 【1】若…

詳解springcloud gateway工作原理、斷言、filter、uri、id、全局跨域、globalfilter等以及關鍵源碼實現

1.gateway概念 網關就是當前微服務項目的"統一入口"程序中的網關就是當前微服務項目對外界開放的統一入口所有外界的請求都需要先經過網關才能訪問到我們的程序提供了統一入口之后,方便對所有請求進行統一的檢查和管理 2. 網關的主要功能 將所有請求統一經過網關網…

C#中的弱引用使用

弱引用&#xff08;Weak Reference&#xff09;是一種特殊的引用類型&#xff0c;它允許你引用一個對象&#xff0c;但不會阻止該對象被垃圾回收器&#xff08;GC&#xff09;回收。弱引用通常用于需要緩存或跟蹤對象&#xff0c;但又不希望因保留引用而導致內存泄漏的場景。弱…

spring響應式編程系列:異步生產數據

目錄 示例 大致流程 create new MonoCreate subscribe new LambdaMonoSubscriber monoCreate.subscribe accept success onNext 時序圖 類圖 數據發布者 MonoCreate 數據訂閱者 LambdaMonoSubscriber 訂閱的消息體 DefaultMonoSink 本篇文章我們來研究如何將…

MCP Python SDK構建的**SQLite瀏覽器**的完整操作指南

以下是使用MCP Python SDK構建的SQLite瀏覽器的完整操作指南&#xff1a; 一、環境準備 安裝依賴 # 安裝MCP SDK及SQLite支持 pip install mcp sqlite3創建測試數據庫 sqlite3 test.db <<EOF CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, email TEXT); IN…

【Python爬蟲基礎篇】--3.cookie和session

目錄 1.cookie 1.1.定義 1.2.參數 1.3.分類 2.session 3.使用cookie登錄微博 4.使用session登錄 1.cookie 由于http是一個無狀態的協議&#xff0c;請求與請求之間無法相互傳遞或者記錄一些信息&#xff0c;cookie和session正是為了解決這個問題而產生。 例子&#xff1…