C 語言學習筆記

文章目錄

  • 程序設計入門 --- C 語言
    • 第一周 程序設計與 C 語言
      • 1 計算機與編程語言:計算機怎么做事情的,編程語言是什么
        • 📒 1.1 計算機的普遍應用 —— 離了它,現代人可能不會“活”了
          • **🌐 科學計算:計算機的“最強大腦”時刻**
          • **📊 數據處理:現代社會的“數字管家”**
          • **🎨 輔助設計:從“手繪黨”到“CAD大神”**
          • **🤖 過程控制:讓機器“自己動”**
          • **🧠 人工智能:從“人工智障”到“真·AI”**
          • **🌐 網絡應用:地球村“村民”的日常生活**
          • **🎮 娛樂應用:游戲黨的“精神鴉片”**
          • **🏥 醫療健康:從“望聞問切”到“AI問診”**
          • **🏭 工業生產:從“手工打造”到“黑燈工廠”**
          • **📌 本節總結**
        • **📒 1.2 計算機與人的交互 —— 從“雞同鴨講”到“心有靈犀”的進化史**
          • **🤔 交互是什么?人和計算機的“對話”藝術**
          • **💻 交互進化史:從“密碼專家”到“讀心術”**
          • **🎮 交互類型大賞:手殘黨 vs 技術流**
          • **🚀 當前趨勢:多模態交互“全家桶”**
          • **📌 本節總結**
        • **📒 1.3 計算機的工作原理 —— 從“按按鈕”到“秒懂你”的魔法揭秘**
          • **🔮 核心問題:計算機怎么“聽懂”你的指令?**
          • **🧩 拆解計算機的“身體構造”**
          • **🚀 計算機的“工作流程”**
          • **🧠 計算機的“思維模式”:二進制**
          • **💡 關鍵原理:馮·諾依曼結構**
          • **📌 本節總結**
        • **📒 1.4 編程語言的作用 —— 人類與計算機的“翻譯官”修煉手冊**
          • **🤖 編程語言是什么?**
          • **💡 編程語言的三大核心作用**
            • **1. 抽象化:讓計算機“聽懂人話”**
            • **2. 效率提升:從“手搓代碼”到“樂高式開發”**
            • **3. 跨平臺與領域適配:一門語言走天下**
          • **🎮 編程語言的“隱藏技能”**
            • **1. 思維訓練:計算思維養成記**
            • **2. 創意實現:從“腦洞”到“現實”**
            • **3. 職業賦能:從“打工人”到“技術大佬”**
          • **📌 本節總結**
      • 2 計算機的思維方式:重復是計算機最擅長的
        • **📒 2.1 計算機的思維方式 —— 從“機械執行”到“邏輯推理”的進化論**
          • **🤖 計算機的“底層邏輯”:二進制與邏輯門**
          • **🧠 算法思維:解決問題的“套路大全”**
          • **🚀 計算機的“超能力”:并行與批量處理**
          • **?? 計算機的“局限性”:沒有“常識”,只有“規則”**
          • **🔮 計算機思維的“進化”:從規則到學習**
          • **📌 本節總結**
        • **📒 2.2 解釋執行與編譯執行:程序員的“翻譯官”之爭**
          • **🤔 核心問題:代碼怎么變成計算機能懂的“話”?**
          • **🔄 解釋執行:逐行“翻譯”,現場表演**
          • **?? 編譯執行:一次性“翻譯”,電影上映**
          • **🆚 解釋執行 vs 編譯執行:一場沒有勝負的戰爭**
          • **🌉 折中方案:JIT 編譯**
          • **📌 本節總結**
      • 3 為什么學 C 語言:C 語言在工業界有重要地位,在很多領域無可替代
        • **📒3.1 C語言在工業界的地位:底層霸主與跨平臺王者**
          • **🏆 工業界的“底層基建”:操作系統與嵌入式開發**
          • **🔧 工業控制的“瑞士軍刀”:PLC 與機器人編程**
          • **🚀 高性能計算的“隱形冠軍”**
          • **🔄 現代工業的“粘合劑”:跨語言協作**
          • **🛡? 安全性升級:從“野蠻生長”到“防御編程”**
            • **📌 本節總結**
        • **📒3.2 語言的庫對其重要性的影響:編程世界的“生態戰爭”**
          • **🔍 庫:編程語言的“武器庫”與“彈藥”**
            • **🚀 1. 開發效率:用庫“拼樂高”,不用“手搓零件”**
            • **🔧 2. 生態壁壘:得庫者得天下**
            • **🌐 3. 適用場景:庫決定語言的“能力邊界”**
            • **?? 4. 庫的“雙刃劍”效應**
          • **📌 本節總結**
      • 4 關于 C 語言和版本的歷史
        • **📒4.1 C語言起源與發展:從UNIX內核到現代工業的編程語言傳奇**
          • **🌱 起源:為UNIX而生的“技術革命”**
          • **📚 發展:從“K&R標準”到國際化演進**
          • **🔧 技術特性:高效與靈活的“雙刃劍”**
          • **🏭 工業應用:現代科技的“隱形支柱”**
          • **🌍 影響與傳承:從 C 到現代編程語言生態**
          • **📌 本節總結**
      • 5 環境安裝:Visual C _2010_學習版_離線包(2025年全國計算機二級 C 語言考試官方指定版本)和 Microsoft Visual Studio
          • **?? 重要前提**
          • **🔧 安裝步驟**
        • **第一步:安裝 Visual C++ 2010 學習版**
        • **第二步:安裝 Microsoft Visual Studio(以VS 2022為例)**

程序設計入門 — C 語言

老師:“C語言是編程之母,學好了它,其他語言都是弟弟!”

我:“好好好,母上大人好!”(內心OS:母上大人怎么連個 Hello World 都寫不利索?)

第一周 程序設計與 C 語言

本周目標:從編程小白進階成“能寫出 Hello World 但會被自己蠢哭”的菜鳥。

1 計算機與編程語言:計算機怎么做事情的,編程語言是什么

計算機就像一個絕對聽話但超級笨的機器人

📒 1.1 計算機的普遍應用 —— 離了它,現代人可能不會“活”了
🌐 科學計算:計算機的“最強大腦”時刻
  • 應用場景:天氣預報、火箭發射、基因測序……
  • 吐槽
    “每次看天氣預報都懷疑人生,計算機算得準,但雨總愛挑我出門時下!不過想想,沒有它,我們可能還在用‘烏龜殼占卜法’預測天氣……”
📊 數據處理:現代社會的“數字管家”
  • 應用場景:
    • 辦公:Excel、Word、PPT “三件套”打工人必備。
    • 生活:網購記錄、外賣地址、短視頻推薦算法……
  • 崩潰瞬間
    “Excel公式寫錯,全公司數據亂成一鍋粥,老板差點讓我用算盤重新算!”
    “推薦算法比我還懂我?刷半小時短視頻,滿屏都是‘一秒教你月入十萬’的廣告!”
🎨 輔助設計:從“手繪黨”到“CAD大神”
  • 應用場景:
    • 建筑師用CAD畫圖紙,工程師用 SolidWorks 設計零件。
  • 吐槽
    “以前畫圖靠尺子和橡皮,現在靠鼠標和 Ctrl+Z(撤銷)!不過,軟件崩潰時,我畫了一周的圖可能連‘再見’都沒說就消失了……”
🤖 過程控制:讓機器“自己動”
  • 應用場景:
    • 工廠自動化生產線、地鐵信號系統、智能家居。
  • 崩潰瞬間
    “智能家居?智障家居還差不多!說好的‘語音控制空調’,結果它聽成了‘播放《最炫民族風》’!”
    “工廠機器人罷工?維修費夠我半年的工資了……”
🧠 人工智能:從“人工智障”到“真·AI”
  • 應用場景:
    • 語音助手(Siri、小愛同學)、自動駕駛、人臉識別。
  • 吐槽
    “Siri,幫我定個鬧鐘!Siri:‘我不太明白你在說什么……’(行,你贏了)”
    “人臉識別失敗?我妝前妝后差別有這么大嗎?還是它根本沒見過素顏的我?”
🌐 網絡應用:地球村“村民”的日常生活
  • 應用場景:
    • 社交媒體(微信、微博)、在線教育(網課)、遠程辦公(Zoom)。
  • 崩潰瞬間
    “網課卡成PPT,老師問我為什么不動,我:‘老師,我網卡了……’(實際在偷吃零食)”
    “微信消息發不出去,對方以為我高冷,其實我只是沒流量了……”
🎮 娛樂應用:游戲黨的“精神鴉片”
  • 應用場景:
    • 電子游戲(LOL、原神)、VR/AR體驗、流媒體(B站、抖音)。
  • 吐槽
    “游戲延遲460ms,隊友問我為什么掛機,我:‘我在用意念操作!’(實際在摔鼠標)”
    “B站刷到凌晨三點,第二天頂著黑眼圈上課,老師:‘昨晚熬夜學習了吧?’(我:‘是的,老師……’)”
🏥 醫療健康:從“望聞問切”到“AI問診”
  • 應用場景:
    • 醫療影像分析(CT、MRI)、電子病歷、遠程手術。
  • 吐槽
    “AI問診?我咳嗽兩聲,它說我得了‘絕癥’,嚇得我立馬買了份保險!”
    “電子病歷方便是方便,但醫生字跡再潦草,也擋不住它打印出來工工整整……”
🏭 工業生產:從“手工打造”到“黑燈工廠”
  • 應用場景:
    • 自動化生產線、工業機器人、質量檢測。
  • 崩潰瞬間
    “工業機器人精度0.01mm,但操作失誤一次,整個車間可能陪我‘加班’到天亮……”
    “質量檢測系統太嚴格?我做的零件被它打了10次回爐重造,最后我發現是系統參數設錯了……”
📌 本節總結
  1. 計算機已經滲透到生活的方方面面,從“高大上”的科研到“接地氣”的娛樂。
  2. 它讓生活更便捷,但也帶來了新煩惱(比如AI的“人工智障”時刻)。
  3. 吐槽歸吐槽,但離了它,現代人可能真的不會“活”了……
📒 1.2 計算機與人的交互 —— 從“雞同鴨講”到“心有靈犀”的進化史
🤔 交互是什么?人和計算機的“對話”藝術

人機交互(HCI)就是人跟計算機“聊天”的過程,只不過計算機是個“鋼鐵直男”,只會按固定套路回應你。

  • 核心三要素:
    • :得會“說”計算機能聽懂的話(比如點鼠標、喊“Siri”)。
    • 計算機:得把人的指令翻譯成自己能執行的操作(比如你點“保存”,它就把文件存到硬盤)。
    • 交互方式:就是中間那層“翻譯官”,比如鍵盤、屏幕、語音助手。

吐槽
“以前跟計算機對話像加密電報,現在像聊微信——但偶爾它還是聽不懂人話!”

💻 交互進化史:從“密碼專家”到“讀心術”
  1. 遠古時代:打孔卡片+命令行(1940s-1970s)
    • 操作方式:在卡片上打孔代表指令,或者敲代碼(比如print "Hello")。
    • 體驗:“感覺自己在給計算機發摩斯密碼,錯一個孔就全崩!”
  2. PC時代:圖形界面+鼠標(1980s-1990s)
    • 操作方式:蘋果Macintosh和微軟Windows帶火了“點圖標、拖窗口”。
    • 體驗:“終于不用背命令了!鼠標一劃,世界都是我的~”
  3. 移動互聯網時代:觸控屏(2000s-2010s)
    • 操作方式:iPhone引領的“指哪打哪”,滑動、縮放全靠手。
    • 體驗:“手機屏幕比我臉還干凈,因為全是指紋……”
  4. AI時代:語音/手勢/VR(現在)
    • 操作方式:喊“Siri”訂外賣、揮揮手打游戲、戴VR頭盔“穿越”。
    • 體驗:“感覺自己是鋼鐵俠!但偶爾喊十遍‘Siri’它才理我……”

未來展望

  • 腦機接口:直接“意念操控”,比如用大腦想“播放周杰倫”,電腦秒懂。
  • 情感計算:計算機能識別你的情緒,你生氣時它自動放《暖暖》。
🎮 交互類型大賞:手殘黨 vs 技術流
  1. 觸控交互

    :手機、平板的“點滑縮放”。

    • 優勢:直觀,連我奶奶都會。
    • 崩潰瞬間:冬天戴手套無法解鎖,只能對著屏幕哈氣……
  2. 語音交互

    :Siri、小愛同學。

    • 優勢:開車時喊“調低空調”超方便。
    • 崩潰瞬間:“Siri,播放《涼涼》!Siri:‘好的,正在播放《熱熱》……’”
  3. 手勢交互

    :體感游戲、VR手勢識別。

    • 優勢:玩《節奏光劍》像在舞劍,燃脂又解壓。
    • 崩潰瞬間:手勢太復雜,像在跳“廣場舞版黑客帝國”。
  4. 生物識別

    :指紋、人臉解鎖。

    • 優勢:再也不用記密碼!
    • 崩潰瞬間:化妝后手機認不出我,仿佛被“渣機”拋棄……
🚀 當前趨勢:多模態交互“全家桶”

現在流行**“混搭風”**,比如:

  • VR游戲:手柄+手勢+語音,全方位沉浸。
  • 智能汽車:觸控屏+語音+手勢,開車時不用分心找按鈕。
  • 智能家居:手機APP+語音+傳感器,躺床上喊“關燈”就能睡。

吐槽
“以后交互方式可能比火鍋蘸料還多,選擇困難癥要瘋了!”

📌 本節總結
  1. 交互就是人和計算機的“對話”,從打孔卡片進化到“意念操控”。
  2. 現在流行“混搭交互”,未來可能“心有靈犀”——計算機比你媽還懂你。
  3. 吐槽歸吐槽,但每次交互升級都讓我感嘆:“科技,真香!”
📒 1.3 計算機的工作原理 —— 從“按按鈕”到“秒懂你”的魔法揭秘
🔮 核心問題:計算機怎么“聽懂”你的指令?

想象一下,你對著計算機喊:“把這張照片P成漫畫風!”

計算機的內心OS:“好嘞!但首先,我得拆解成以下步驟……”

🧩 拆解計算機的“身體構造”

計算機就像一個分工明確的團隊,每個部件各司其職:

  1. CPU(中央處理器):
    • 角色:團隊里的“超級大腦”,負責算數、邏輯判斷和發號施令。
    • 特點:快但“健忘”(比如算完1+1=2,馬上忘記過程)。
    • 吐槽:“CPU速度以 GHz 計,但每次只能做一件事,多線程?不存在的!”
  2. 內存(RAM):
    • 角色:CPU的“臨時工作臺”,存放正在運行的程序和數據。
    • 特點:讀寫快,但斷電就清空(比如游戲沒保存就關機,進度歸零)。
    • 比喻:“像黑板,寫滿了草稿,擦掉就沒了。”
  3. 硬盤(HDD/SSD):
    • 角色:長期存儲數據的“檔案室”,比如照片、視頻、文檔。
    • 特點:讀寫慢,但斷電不丟數據(SSD比HDD快,但更貴)。
    • 吐槽:“硬盤容量用TB計,但找文件時像在倉庫翻箱倒柜……”
  4. 輸入/輸出設備:
    • 輸入:鍵盤、鼠標、麥克風(給計算機“喂指令”)。
    • 輸出:顯示器、打印機、揚聲器(計算機“交作業”)。
    • 吐槽:“觸控屏既是輸入也是輸出,計算機:我自給自足!”
🚀 計算機的“工作流程”

以“打開Word寫論文”為例:

  1. 輸入:你雙擊Word圖標(鼠標點擊被翻譯成電信號)。
  2. 加載:CPU從硬盤調取Word程序,加載到內存。
  3. 運行:CPU逐行執行代碼(比如顯示菜單欄、工具欄)。
  4. 交互:你打字,CPU實時處理(比如顯示文字、自動保存)。
  5. 輸出:你保存文檔,CPU將數據寫回硬盤。

崩潰瞬間

  • “Word卡死?CPU正在滿負荷運行,內存被占滿,硬盤瘋狂讀寫……”
  • “自動保存失敗?可能是硬盤罷工,或者內存不夠用了!”
🧠 計算機的“思維模式”:二進制

計算機只認0和1,但如何表示復雜信息?

  • 編碼規則:
    • 字母、數字、符號被翻譯成二進制碼(比如A01000001)。
    • 圖片、視頻被拆解成像素點,每個像素用二進制表示顏色和位置。
  • 吐槽:“你發給朋友的表情包,在計算機眼里是0101的數字海嘯!”
💡 關鍵原理:馮·諾依曼結構

現代計算機都遵循**“存儲程序”**理念:

  1. 程序和數據一起存放在內存中。
  2. CPU按順序讀取指令并執行。
  3. 通過輸入/輸出設備與人交互。

比喻
“就像你做飯:菜譜(程序)和食材(數據)都在廚房(內存),你(CPU)按步驟操作,最后端菜上桌(輸出)。”

📌 本節總結
  1. 計算機是“分工明確的團隊”,CPU算數、內存暫存、硬盤長存、輸入輸出設備溝通。
  2. 工作流程:輸入→加載→運行→交互→輸出。
  3. 底層邏輯是二進制,但通過編碼和馮·諾依曼結構,能處理復雜任務。
📒 1.4 編程語言的作用 —— 人類與計算機的“翻譯官”修煉手冊
🤖 編程語言是什么?

編程語言就是人類和計算機之間的“翻譯官”,讓你能用“人話”指揮計算機干活,而不是對它喊“010101”的二進制密碼。

  • 核心使命:把人類能理解的代碼,翻譯成計算機能執行的機器碼。
  • 進化史:
    • 機器語言:直接寫0和1(計算機:“我聽懂了!” 人類:“我瞎了……”)
    • 匯編語言:用MOV AX, BX代替01(稍微友好,但依然像天書)
    • 高級語言:C、Python、Java(終于能說人話了!比如print("Hello")

吐槽
“學編程語言,本質是在學如何優雅地‘馴服’一個鐵憨憨(計算機)!”

💡 編程語言的三大核心作用
1. 抽象化:讓計算機“聽懂人話”
  • 底層邏輯:計算機只認 0/1 和電路開關,但人類不可能直接操作這些。

  • 解決方案:

    ? 編程語言提供“語法糖”,比如:

    • int a = 5; 代替一堆二進制位操作。
    • if (a > 0) 代替復雜的電路跳轉邏輯。
  • 比喻
    “編程語言像極了你的手機輸入法,自動把‘nmsl’翻譯成‘你萌死了’(誤)。”

2. 效率提升:從“手搓代碼”到“樂高式開發”
  • 模塊化:把重復代碼封裝成函數/類,像搭樂高一樣復用。
    • 例如:寫一個add(a, b)函數,以后直接調用,不用重復寫a + b
  • 庫與框架:別人寫好的輪子,你直接拿來用。
    • 例如:用Python的 pandas 庫處理數據,比手寫算法快100倍。
  • 吐槽
    “不會用庫的程序員,就像不會用洗衣機的原始人——純手搓代碼,累死自己!”
3. 跨平臺與領域適配:一門語言走天下
  • 跨平臺:比如 Java 的“一次編寫,到處運行”(Write Once, Run Anywhere)。
    • 例子:用 Java 寫的游戲,能在 Windows、Mac、安卓上跑。
  • 領域適配:不同語言擅長不同領域。
    • C語言:操作系統、嵌入式開發(貼近硬件,效率高)。
    • Python:數據分析、AI(庫多,語法簡單)。
    • JavaScript:網頁交互(瀏覽器原生支持)。
  • 比喻
    “編程語言像工具箱里的螺絲刀,有的適合擰細螺絲(Python),有的適合撬地板(C語言)。”
🎮 編程語言的“隱藏技能”
1. 思維訓練:計算思維養成記
  • 寫代碼像解謎題:如何把復雜問題拆解成計算機能執行的步驟?
    • 例子:用循環結構批量處理數據,比手動操作快 100 倍。
  • 吐槽
    “學編程后,我看世界的方式都變了——連等電梯都在想‘這是不是個隊列結構?’”
2. 創意實現:從“腦洞”到“現實”
  • 編程語言是“魔法棒”,能把想法變成可交互的產品。
    • 例子:用 Python 寫個爬蟲抓取全網表情包,或用 Unity+C# 開發獨立游戲。
  • 比喻
    “不會編程的創意人,就像有菜譜但沒鍋的廚師——空有一肚子想法,做不出菜!”
3. 職業賦能:從“打工人”到“技術大佬”
  • 編程語言是“職場硬通貨”,能解鎖高薪崗位。
    • 例子:會 Python 的數據分析師比只會 Excel 的薪資高 30%。
  • 吐槽
    “HR:‘你會 Java 嗎?’ 我:‘會一點點……’ HR:‘恭喜,你被錄取了!’(其實我只會寫 Hello World)”
📌 本節總結
  1. 編程語言是人類與計算機的翻譯官,讓“人話”變“機語”。
  2. 核心作用:抽象化硬件、提升效率、適配不同場景。
  3. 隱藏價值:訓練思維、實現創意、賦能職業。

2 計算機的思維方式:重復是計算機最擅長的

計算機就像一個有強迫癥的流水線工人,只擅長做一件事——重復執行指令

📒 2.1 計算機的思維方式 —— 從“機械執行”到“邏輯推理”的進化論
🤖 計算機的“底層邏輯”:二進制與邏輯門

計算機的思維方式,本質上是二進制與邏輯運算的“機械舞蹈”

  • 二進制:所有信息(文字、圖片、聲音)都被翻譯成0和1的組合。
    • 例如:字母 A 在ASCII碼中是01000001
  • 邏輯門:通過與、或、非等基本操作,實現復雜計算。
    • 例如:與門(AND)只有當兩個輸入都為1時,輸出才為1。

吐槽
“計算機的‘大腦’里沒有‘可能’‘大概’這些詞,只有‘是’或‘否’的絕對判斷!”

🧠 算法思維:解決問題的“套路大全”

算法是計算機解決問題的“套路”,核心是將問題拆解為可重復的步驟

  • 經典算法案例:
    • 排序算法:冒泡排序、快速排序(比誰更快把數字排好隊)。
    • 搜索算法:二分查找、廣度優先搜索(比誰更快找到目標)。
  • 算法思維的特點:
    • 確定性:每一步都明確,沒有歧義。
    • 有限性:必須在有限步驟內結束。
    • 有效性:每一步都能被計算機執行。

比喻
“算法就像菜譜,步驟錯了,菜就‘翻車’(比如把糖和鹽搞混)!”

🚀 計算機的“超能力”:并行與批量處理

計算機最擅長的,是同時處理大量重復任務

  • 并行計算:
    • 多核 CPU/GPU 同時處理不同任務(比如一邊渲染視頻,一邊解壓文件)。
      • 例子:用 CUDA 并行計算矩陣乘法,速度提升幾十倍。
  • 批量處理:
    • 一次性處理海量數據(比如用循環給10萬張圖片加水印)。
      • 例子:大數據分析中,用 MapReduce 框架批量處理日志。

吐槽
“并行計算像開掛,但掛開太大可能崩潰(比如內存不足)……”

?? 計算機的“局限性”:沒有“常識”,只有“規則”

計算機的思維方式,也決定了它的局限性

  • 無法理解“常識”:
    • 例子:對計算機說“把大象裝進冰箱”,它可能真的會嘗試物理操作,而不是分步驟(打開門→放大象→關門)。
  • 依賴明確指令:
    • 例子:自動駕駛汽車需要精確的地圖和規則,遇到未標注的障礙物可能“懵逼”。

吐槽
“計算機就像一個‘鋼鐵直男’,你告訴他‘多喝熱水’,他真的會去燒水,而不是關心你生病了……”

🔮 計算機思維的“進化”:從規則到學習

近年來,人工智能讓計算機開始模仿人類的“模糊思維”

  • 機器學習:
    • 通過大量數據“學習”規律(比如識別貓狗圖片)。
    • 例子:AlphaGo 通過自我對弈,學會了人類從未想過的棋路。
  • 深度學習:
    • 用神經網絡模擬人腦(但本質仍是矩陣運算和優化算法)。
    • 例子:GPT-4 能寫詩、編代碼,但依然可能“一本正經地胡說八道”。

吐槽
“AI像‘學霸’,考試能拿滿分,但不知道‘1+1為什么等于2’……”

📌 本節總結
  1. 底層邏輯:二進制+邏輯門,計算機的“機械舞蹈”。
  2. 算法思維:拆解問題為可重復步驟,確定性、有限性、有效性。
  3. 超能力:并行+批量處理,效率起飛。
  4. 局限性:依賴明確規則,無法理解“常識”。
  5. 進化方向:AI讓計算機開始“模糊思考”,但本質仍是優化算法。
📒 2.2 解釋執行與編譯執行:程序員的“翻譯官”之爭
🤔 核心問題:代碼怎么變成計算機能懂的“話”?

想象一下,你寫了一行代碼print("Hello World"),計算機是怎么看懂并執行的?
這背后有兩種“翻譯官”在打架:解釋器編譯器

🔄 解釋執行:逐行“翻譯”,現場表演

解釋器就像同聲傳譯,你寫一句代碼,它“翻譯”一句,計算機立刻執行。

  • 工作流程:
    1. 讀取源代碼→2. 逐行“翻譯”成機器碼→3. 立即執行→4. 重復直到程序結束。
  • 特點:
    • 即時反饋:改完代碼馬上運行,適合調試(比如 Python 的交互模式)。
    • 跨平臺性強:只要安裝對應解釋器,代碼就能跑(比如 Python 代碼在Windows/Mac/Linux 通用)。
    • 效率較低:每次運行都要“翻譯”,相同代碼比編譯執行慢。
  • 典型語言:Python、JavaScript、Ruby。

吐槽
“解釋執行像‘邊吃飯邊做飯’,吃一口做一口,慢是慢點,但隨時能改菜單!”

?? 編譯執行:一次性“翻譯”,電影上映

編譯器就像電影導演,先把劇本(代碼)完整“翻譯”成電影(機器碼),再“上映”(執行)。

  • 工作流程:
    1. 讀取全部源代碼→2. 整體“翻譯”成機器碼→3. 生成可執行文件→4. 運行可執行文件。
  • 特點:
    • 執行快:一次“翻譯”,多次運行,適合大型項目(比如 C 語言寫的操作系統)。
    • 平臺相關:編譯后的機器碼只能在特定平臺運行(比如 Windows 的 .exe 文件不能在 Mac 直接運行)。
    • 調試麻煩:改完代碼需要重新編譯,才能看到效果。
  • 典型語言:C、C++、Rust。

吐槽
“編譯執行像‘先拍完電影再上映’,前期投入大,但票房(執行效率)可能更高!”

🆚 解釋執行 vs 編譯執行:一場沒有勝負的戰爭
對比項解釋執行編譯執行
執行速度慢(逐行翻譯)快(一次翻譯,多次運行)
跨平臺性強(有解釋器就能跑)弱(機器碼依賴平臺)
調試體驗好(改完馬上運行)差(需重新編譯)
典型場景腳本語言、快速開發系統級編程、高性能需求
🌉 折中方案:JIT 編譯

為了兼顧兩者的優點,現代語言發明了**JIT(即時編譯)**技術:

  • 工作流程:
    1. 解釋執行代碼→2. 記錄熱點代碼(頻繁運行的部分)→3. 將熱點代碼編譯成機器碼→4. 后續直接運行機器碼。
  • 典型應用:
    • Java 的 JVM(Java 虛擬機)
    • JavaScript 的 V8 引擎(Chrome 瀏覽器)
  • 優勢:
    • 冷啟動快(初始解釋執行)
    • 長期運行效率高(熱點代碼編譯)

吐槽
“JIT 像‘外賣平臺’,先接單再優化路線,送得越多越快!”

📌 本節總結
  1. 解釋執行:逐行翻譯,即時反饋,適合腳本語言。
  2. 編譯執行:一次性翻譯,執行快,適合系統級編程。
  3. JIT編譯:折中方案,兼顧冷啟動和長期效率。

3 為什么學 C 語言:C 語言在工業界有重要地位,在很多領域無可替代

📒3.1 C語言在工業界的地位:底層霸主與跨平臺王者
🏆 工業界的“底層基建”:操作系統與嵌入式開發

C 語言是操作系統內核開發的“官方語言”,Linux、Windows、macOS 等系統的核心代碼均由 C 語言編寫。其底層控制能力體現在:

  • 硬件直連:通過指針直接操作內存和硬件寄存器,實現精準控制(如驅動開發)。
  • 性能極致:編譯后的代碼執行效率接近匯編語言,適合對性能要求極高的場景(如云服務器內核)。
  • 跨平臺統治:從嵌入式設備到超級計算機,C語言代碼只需少量修改即可移植,成為跨平臺開發的基石。

案例

  • 汽車電子:發動機控制單元(ECU)用C語言編寫,確保實時響應油門、剎車等指令。
  • 物聯網:智能家居設備(如智能燈泡)的固件用C語言開發,在資源受限環境下實現高效通信。
🔧 工業控制的“瑞士軍刀”:PLC 與機器人編程

在工業自動化領域,C 語言是可編程邏輯控制器(PLC)編程的主力語言,其優勢包括:

  • 實時控制:通過多線程技術實現傳感器數據采集、設備協同和故障監測(如汽車生產線機械臂同步)。
  • 硬件適配:直接讀寫 I/O 端口,控制電機、閥門等設備的開關和速度。
  • 可靠性:代碼經過嚴格測試,可連續運行數年無故障(如化工廠反應釜控制)。

對比PLC專用語言

  • 靈活性:C 語言支持復雜邏輯和算法,而 PLC 梯形圖僅適合簡單邏輯。
  • 擴展性:C 語言可調用外部庫(如數學計算庫),而 PLC 語言功能受限。
🚀 高性能計算的“隱形冠軍”

在科學計算和人工智能領域,C 語言是底層庫的“建造者”

  • 基礎庫:BLAS、LAPACK 等線性代數庫用 C 語言編寫,為 Python/MATLAB 等高級語言提供性能支撐。
  • 硬件加速:通過 CUDA C(針對GPU)和OpenCL C(針對異構計算),實現深度學習模型的訓練加速。

數據

  • 全球 Top500 超算中,90% 以上使用 C 語言編寫的操作系統和并行計算框架。
🔄 現代工業的“粘合劑”:跨語言協作

C語言通過 **FFI(外部函數接口)**與現代語言無縫協作:

  • Python+C:用 C 語言編寫高性能計算核心,Python 調用以實現快速開發(如數據分析庫Pandas)。
  • Rust+C:Rust 的安全特性與 C 語言的性能結合,用于開發區塊鏈底層系統。
🛡? 安全性升級:從“野蠻生長”到“防御編程”

針對緩沖區溢出等歷史問題,C語言通過以下方式強化安全性:

  • 工具鏈:靜態分析工具(如 Clang-Tidy)在編譯階段檢測內存泄漏。
  • 標準演進:C23 標準引入安全函數(如 strcpy_s 替代不安全的 strcpy)。
📌 本節總結
  1. 底層霸主:操作系統、嵌入式、工業控制等領域不可替代。
  2. 性能標桿:高頻交易、實時系統、科學計算的首選語言。
  3. 跨平臺王者:從單片機到數據中心,一套代碼通吃。
  4. 生態粘合劑:通過FFI與現代語言協作,拓展應用邊界。

未來趨勢

  • C23標準:增強 Unicode 支持、簡化嵌入式開發。
  • 硬件融合:與 GPU/FPGA 深度整合,主導異構計算時代。

C 語言就像工業界的“內功心法”,雖不顯眼,但所有“招式”(應用)都需依賴其運行。學通 C 語言,方知計算機底層邏輯之精妙!

📒3.2 語言的庫對其重要性的影響:編程世界的“生態戰爭”
🔍 庫:編程語言的“武器庫”與“彈藥”

如果說編程語言是“武器”,那么庫就是“彈藥”——沒有彈藥,武器只是擺設。庫對語言的重要性,體現在以下層面:

🚀 1. 開發效率:用庫“拼樂高”,不用“手搓零件”
  • 代碼復用:庫封裝了通用功能(如網絡請求、數據解析),開發者無需重復造輪子。
    • 例如:Python的 requests 庫,三行代碼就能發送 HTTP 請求,而無需手動處理 TCP/IP 協議。
  • 抽象層級:庫將底層細節(如內存管理)隱藏,開發者可聚焦業務邏輯。
    • 例如:JavaScript 的 React 庫,用組件化開發替代手動操作 DOM,效率提升數倍。

對比

  • 有庫:寫一個 Web 應用,只需調用 Flask/Django 的路由、模板引擎。
  • 無庫:需手動解析 HTTP 請求、渲染 HTML,代碼量暴增 10 倍。
🔧 2. 生態壁壘:得庫者得天下
  • 語言競爭:庫的數量和質量,直接影響語言的適用場景。
    • 例如:Python 因 NumPy/Pandas 成為數據科學首選,而PHP因 Laravel/Symfony 稱霸 Web 開發。
  • 社區活力:活躍的開源社區能持續輸出高質量庫,形成“馬太效應”。
    • 例如:JavaScript 的 npm 倉庫擁有百萬級庫,遠超其他語言。

數據

  • Python的 PyPI 倉庫有 40萬+庫,覆蓋 AI、Web、自動化等領域。
  • Rust的 crates.io 倉庫雖小(7萬+庫),但質量極高,吸引系統級開發者。
🌐 3. 適用場景:庫決定語言的“能力邊界”
  • 領域專用庫:將語言錨定在特定場景。
    • 例如:
      • TensorFlow/PyTorch 讓 Python 成為 AI “官方語言”。
      • Unity/Unreal Engine的 C#庫 讓游戲開發更高效。
  • 跨平臺庫:擴展語言的覆蓋范圍。
    • 例如:
      • Electron 庫讓 JavaScript 能開發桌面應用(如VS Code)。
      • Flutter 庫讓 Dart 語言能開發跨平臺移動應用。

案例

  • Julia語言:因科學計算庫不足,雖性能媲美 C,但普及度遠低于 Python。
  • Go語言:憑 goroutine+channel 庫,成為并發編程首選(如 Docker/Kubernetes)。
?? 4. 庫的“雙刃劍”效應
  • 依賴風險:過度依賴第三方庫可能導致:
    • 安全漏洞:如 left-pad 事件,一個庫下架導致整個 npm 生態癱瘓。
    • 兼容性問題:庫版本升級可能破壞現有代碼(如 Python 2→3 的兼容性問題)。
  • 學習成本:庫的多樣性雖好,但選擇困難癥和 API 差異可能增加學習負擔。

吐槽
“學 Python 像‘點菜’,庫太多反而不知道選哪個;學 Rust 像‘組裝家具’,庫雖少但每個都精工細作。”

📌 本節總結
  1. 開發效率:庫是“代碼復用”的載體,減少重復勞動。
  2. 生態壁壘:庫的數量/質量決定語言競爭力,形成“馬太效應”。
  3. 適用場景:領域專用庫錨定語言定位,跨平臺庫擴展能力邊界。
  4. 雙刃劍:依賴風險與學習成本需權衡。

未來趨勢

  • AI輔助選庫:用 AI 推薦最適合的庫(如GitHub Copilot)。
  • 模塊聯邦:WebAssembly 讓不同語言的庫能跨語言調用(如 Python 調用 Rust 庫)。

語言的庫生態,是開發者“用腳投票”的結果。選語言前,先看它的“武器庫”是否夠硬核!

4 關于 C 語言和版本的歷史

📒4.1 C語言起源與發展:從UNIX內核到現代工業的編程語言傳奇
🌱 起源:為UNIX而生的“技術革命”
  • 誕生背景
    1969年,貝爾實驗室的肯·湯普遜(Ken Thompson)為開發 UNIX 操作系統,急需一種高效且能直接操作硬件的語言。B 語言因功能不足(如無數據類型)被改造,1972 年,丹尼斯·里奇(Dennis Ritchie)在 B 語言基礎上設計出 C 語言,結合了 BCPL 的簡潔性與硬件級控制能力。
  • 早期設計哲學:
    • “信任程序員”:賦予開發者直接操作內存、指針等底層資源的能力。
    • 跨平臺性:通過編譯器適配不同硬件,而非修改代碼本身。
📚 發展:從“K&R標準”到國際化演進
  • 1978年:K&R C的誕生
    里奇與布萊恩·科爾尼漢(Brian Kernighan)合著《The C Programming Language》,確立 C 語言語法規范,成為事實標準(K&R C)。書中經典代碼如 Hello World 和遞歸斐波那契數列,至今仍為教學范本。
  • 標準化進程
    • ANSI C(C89):1983 年 ANSI 成立委員會,1989 年發布首個官方標準,解決不同廠商 C 語言實現差異問題。
    • ISO C(C90):1990 年 ISO 采納 ANSI C 為國際標準,推動 C 語言全球化普及。
    • C99/C11/C17/C23:持續引入新特性(如變長數組、多線程支持、安全函數),保持語言現代性。
🔧 技術特性:高效與靈活的“雙刃劍”
  • 底層控制
    通過指針直接操作內存,實現硬件級優化(如驅動開發、實時系統)。
  • 跨平臺兼容
    代碼可移植性極強,從嵌入式微控制器到超級計算機均能編譯運行。
  • 模塊化設計
    函數與結構體支持復雜系統開發,同時保持語法簡潔性。
🏭 工業應用:現代科技的“隱形支柱”
  • 操作系統開發
    UNIX/Linux 內核、Windows/macOS 系統組件均由 C 語言編寫,確保性能與穩定性。
  • 嵌入式系統
    汽車電子(如ECU)、物聯網設備(如智能家電)的固件依賴 C 語言實現高效資源管理。
  • 工業控制
    PLC 編程、機器人控制(如機械臂協同)利用 C 語言多線程技術滿足實時性需求。
  • 游戲與數據庫
    Unity 游戲引擎底層、MySQL 數據庫核心均基于 C 語言開發,兼顧速度與可靠性。
🌍 影響與傳承:從 C 到現代編程語言生態
  • 語言基因傳承
    C++、Java、Python 等語言均繼承C的語法結構(如循環、條件語句)和設計哲學(如指針概念)。
  • 開源生態基石
    Linux 內核、GNU 工具鏈等項目通過 C 語言實現跨平臺協作,奠定開源軟件基礎。
📌 本節總結
  1. 起源:為 UNIX 開發而生,融合 BCPL/B 語言特性,1972 年正式誕生。
  2. 標準化:從 K&R C到 C23,持續演進以適應現代計算需求。
  3. 技術優勢:底層控制、跨平臺性、模塊化設計構成其核心競爭力。
  4. 工業地位:操作系統、嵌入式、工業控制等領域不可替代的基礎設施。

未來趨勢

  • C23標準:強化安全性(如邊界檢查)、支持 Unicode,拓展新興領域應用。
  • 硬件融合:與 RISC-V、AI 加速器深度整合,主導邊緣計算與異構編程時代。

C 語言不僅是編程語言,更是計算機科學的“活化石”。它的設計哲學與技術演進,持續塑造著現代科技的面貌。

5 環境安裝:Visual C _2010_學習版_離線包(2025年全國計算機二級 C 語言考試官方指定版本)和 Microsoft Visual Studio

第一個是考試用的,第二個是個人學習用的

?? 重要前提
  1. 版本匹配:
    • Visual C++ 2010 學習版:需安裝 Microsoft Visual C++ 2010 Express(官方離線包)。
    • Microsoft Visual Studio:建議安裝 VS 2019/2022 社區版(兼容C語言開發,需手動配置C語言項目模板)。
  2. 系統兼容性:
    • Windows 7/8/10/11 均支持,但需以管理員權限運行安裝程序。
    • 禁用實時防護(如Windows Defender)以避免安裝包被誤刪。

🔧 安裝步驟
第一步:安裝 Visual C++ 2010 學習版
  1. 下載離線包:
    • 百度網盤:Visual Studio 2010 Express 下載
    • 選擇 Visual C++ 2010 學習版(文件約420MB),保存至本地。
  2. 安裝流程:
    • Visual C++ 2010 Express 下載及詳細圖文安裝教程(VC2010)-CSDN博客

第二步:安裝 Microsoft Visual Studio(以VS 2022為例)
  1. 下載安裝程序:
    • 訪問官網:Visual Studio 2022 社區版
    • 選擇 “免費下載”
  2. 安裝流程:
    • Visual Studio Community 2022 最詳細的安裝教程-CSDN博客

📌 提示:建議優先使用 Visual Studio 2022 開發,僅在考試前切換至 Visual C++ 2010 適應環境,避免長期使用舊版IDE導致功能缺失。

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

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

相關文章

服務器修改/home的掛載路徑

寫在前面:前段時間新裝了一臺服務器,/home目錄原本是掛在在系統盤/dev/sda4的分區下,但是系統盤的空間比較小,為了保證后續使用起來,不會遇到磁盤很快就占滿的情況,現在需要將 /home 獨立出來,掛…

刷機維修進階教程-----沒有開啟usb調試 如何在鎖定機型的撥號界面特殊手段來開啟ADB

有時候我們會遇到一些機型被屏幕鎖 賬號鎖等鎖定。無法進入系統界面。也沒有開啟usb調試的情況下如何通過一些操作來開啟adb調試。然后通過adb指令來禁用對應的app順利進入系統。以此來操作保數據等操作. 通過博文了解?????? 1??????----了解一些品牌機型鎖定狀態…

虛擬文件(VFS)

核心知識點:虛擬文件系統(VFS) 1. 通俗易懂的解釋 想象一下你家里的冰箱。你把食物放進去,不用管它是放在塑料盒里、玻璃罐里還是直接用保鮮膜包著,你只需要知道它在冰箱的哪個位置(比如“蔬菜抽屜里”&a…

前后端聯調實戰指南:Axios攔截器、CORS與JWT身份驗證全解析

前言 在現代Web開發中,前后端分離架構已成為主流,而前后端聯調則是開發過程中不可避免的關鍵環節。本文將深入探討前后端聯調中的三大核心技術:Axios攔截器的靈活運用、CORS跨域問題的全面解決方案以及JWT身份驗證的安全實現。通過本文&…

Postman基礎操作

1.Postman是什么? Postman是接口測試的工具,簡單來說它能模擬瀏覽器對服務器的某個接口發起請求并接收響應數據。 1.1 Postman工作原理 2.Postman發送請求 2.1 發送GET請求 我們知道GET請求是沒用請求體的,所以我們需要將請求參數寫在Param…

Elasticsearch Synthetic _source

_source 字段包含索引時傳入的原始 JSON 文檔體。_source 字段本身不被索引(因此不可搜索),但會被存儲,以便在執行獲取請求(如 get 或 search)時返回。 如果磁盤使用很重要,可以考慮以下選項&a…

Vue3 + Element Plus 實現用戶管理模塊

本文介紹一個使用 Vue3 Element Plus 實現的用戶與小組管理模塊,支持用戶的增刪改查(CRUD)和分頁管理,以及小組的新增和刪除功能,適用于管理后臺系統中的用戶權限管理場景。 一、項目簡介 該模塊具備以下功能&#…

Python應用“面向對象”小練習

大家好!面向對象編程是一種以 “對象” 為核心的編程思想。對象可以看作是具有特定屬性和行為的實體。例如,一個學生可以是一個對象,他的屬性包括姓名和年齡,行為可以是打招呼。? 代碼呈現: # 定義類和對象 class Student:def __init__(sel…

線性回歸原理推導與應用(八):邏輯回歸二分類乳腺癌數據分類

乳腺癌數據是sklearn中自帶的數據集,需要通過相關特征對是否患有乳腺癌進行分類。 數據清洗與建模 首先加載相關庫和相關數據 from sklearn.datasets import load_breast_cancer from sklearn.linear_model import LogisticRegression import numpy as np import…

nginx的一些配置的意思

1.用這個端口可以訪問到nginx 2.工作進程,設置成和cpu核心數一樣即可 3.每個工作進程的最大網絡連接數。 4.主機名稱 設置反向代理時,把server_name設置成ip。 5.反向代理進行轉發,localhost指的是nginx所在的機器。 關鍵字proxy_pass。 …

SID103S/D/Q-300nA, 軌至軌, CMOS 運算放大器替代SGM8141

概述 SID103系列產品是專注于超低功耗、軌至軌、CMOS運算放大器,最低工作電壓可以支持到1.4V,并且工作時每個通道僅消耗300nA的電流。特別適合穿戴式、獨立式等對功耗敏感的電池供電場景。 SID103系列產品擁有5kHz的增益帶寬積,外接500pF電…

十六進制字符轉十進制算法

十六進制與十進制對照 十六進制十進制00112233445566778899A10B11C12D13E14F15 十六進制與十進制區別 十六進制是滿16進1,十進制是滿10進1,這里要注意下區別,16進制的字符里面為什么是0-9沒有10,這里面進了一位,表示…

微軟技術賦能:解鎖開發、交互與數據潛力,共探未來創新路

在微軟 Build 2025 大會以及創想未來峰會上,微軟展示的一系列前沿技術與創新應用,不僅展現了其在科技領域的深厚底蘊與前瞻視野,更為開發者和企業帶來了前所未有的機遇與變革動力。 領馭科技作為微軟中國南區核心合作伙伴及 HKCSP 1T 首批授…

并發基礎|進程與線程

進程基礎 什么是進程? 為了實現并發的功能,引入了進程的概念。 ? 為了實現并發,需要引入多程序的環境,但是多程序的環境會造成一些單程序時不存在的問題,比如程序的之間沒有了封閉性,程序不可以連續的執…

鴻蒙倉頡開發語言實戰教程:自定義tabbar

大家周末好呀,今天繼續分享倉頡語言開發商城應用的實戰教程,今天要做的是tabbar。 大家都知道ArkTs有Tabs和TabContent容器,能夠實現上圖的樣式,滿足基本的使用需求。而倉頡就不同了,它雖然也有這兩個組件,…

LINUX526 回顧 配置ssh rsync定時備份(未完成)

配置SSH回顧: 1.關閉防火墻、selinux systemctl stop firewalld systemctl disable firewalld setenforce 0 vim /etc/selinux/config SELINUXdisable 2. 510 2.配置YUM源 我計劃配本地yum源 2.1 yum源備份 cd /etc/yum.repos.d tar -zcf repo.tar.gz *.repo …

hdc - Mac本環境配置

1. 安裝依賴工具 Homebrew 若未安裝 Homebrew,打開終端執行: OpenJDK 11 HDC 依賴 Java 環境,安裝 OpenJDK 11: 配置環境變量: 2. 安裝 DevEco Studio 下載:從華為開發者聯盟下載最新版 DevEco Studio。 …

項目三 - 任務8:實現詞頻統計功能

本項目旨在實現一個詞頻統計功能,通過讀取文本文件并利用Java編程技巧處理和分析文本數據。首先,使用BufferedReader逐行讀取文件內容,然后通過String.split(" ")方法將每行文本分割成單詞數組。接下來,采用HashMap來存…

Python - 文件部分

- 第 101 篇 - Date: 2025 - 05 - 26 Author: 鄭龍浩/仟墨 Python - 文件部分 學習時間: 2025-05-19 文章目錄 Python - 文件部分一 文件與路徑1 文本文件2 二進制文件3 編碼格式① 常見編碼格式② 指定編碼格式③ 最佳格式④ 處理編碼錯誤 4 絕對路徑5 相對路徑基本寫法返回…

R語言開始繪圖--柱狀圖

R語言是一種專門用于統計計算和圖形顯示的編程語言,廣泛應用于數據分析、統計建模、數據可視化等領域。它由Ross Ihaka和Robert Gentleman于1993年在新西蘭奧克蘭大學開發,現已成為數據科學和統計學領域的重要工具。 R語言的特點 R語言具有豐富的統計和…