對于大部分程序員,C語言是學習編程的第一門語言,很少有不了解C的程序員。
### C語言除了能讓你了解編程的相關概念,帶你走進編程的大門,還能讓你明白程序的運行原理,比如,計算機的各個部件是如何交互的,程序在內存中是一種怎樣的狀態,操作系統和用戶程序之間有著怎樣的“愛恨情仇”,這些底層知識決定了你的發展高度,也決定了你的職業生涯。
如果你希望成為出類拔萃的人才,而不僅僅是碼農,這么這些知識就是不可逾越的。也只有學習C語言,才能更好地了解它們。有了足夠的基礎,以后學習其他語言,會觸類旁通,很快上手,7 天了解一門新語言不是神話。
### C語言概念少,詞匯少,包含了基本的編程元素,后來的很多語言(等)都參考了C語言,說C語言是現代編程語言的開山鼻祖毫不夸張,它改變了編程世界。
正是由于C語言的簡單,對初學者來說,學習成本小,時間短,結合本教程,能夠快速掌握編程技術。
在世界編程語言排行榜中,C語言、Java 和 C++ 霸占了前三名,擁有絕對優勢,如下表所示:



2017年,由于小型軟件設備的蓬勃發展以及汽車行業底層軟件的增加,C語言還拿下了「年度編程語言」的桂冠,成為 2017 年全球增長最快的編程語言。下表列出了最近 10 年的“年度編程語言”:

C語言誕生于20世紀70年代,年齡比我們都要大,我們將在《[C語言的三套標準:C89、C99和C11](http://m.biancheng.net/view/vip_1742.html)》一節中講解更多關于C語言的歷史。
當然,C語言也不是沒有缺點,畢竟是70后老人,有點落后時代,開發效率較低,后來人們又在C語言的基礎上增加了面向對象的機制,形成了一門新的語言,稱為C++,我們將在《[C語言和C++到底有什么關系]》中講解。
## C語言難嗎?
和 Java、C++、Python、C#、JavaScript 等高級編程語言相比,C語言涉及到的編程概念少,附帶的標準庫小,所以整體比較簡潔,容易學習,非常適合初學者入門。

編程語言的發展大概經歷了以下幾個階段:
```
[匯編語言]--> 面向過程編程 --> 面向對象編程
```
* 匯編語言是編程語言的拓荒年代,它非常底層,直接和計算機硬件打交道,開發效率低,學習成本高;
* C語言是面向過程的編程語言,已經脫離了計算機硬件,可以設計中等規模的程序了;
* Java、C++、Python、C#、PHP 等是面向對象的編程語言,它們在面向過程的基礎上又增加了很多概念。
C語言出現的時候,已經度過了編程語言的拓荒年代,具備了現代編程語言的特性,但是這個時候還沒有出現“[軟件危機]”,人們沒有動力去開發更加高級的語言,所以也沒有太復雜的編程思想。
也就是說,C語言雖然是現代編程語言,但是它涉及到的概念少,詞匯少,思想也簡單。C語言學習成本小,初學者能夠在短時間內掌握編程技能,非常適合入門。
## C語言是計算機產業的核心語言
也許是機緣巧合,C語言出現后不久,計算機產業開始爆發,計算機硬件越來越小型化,越來越便宜,逐漸進入政府機構,進入普通家庭,C語言成了編程的主力軍,獲得了前所未有的成功,操作系統、常用軟件、硬件驅動、底層組件、核心算法、數據庫、小游戲等都使用C語言開發。
雷軍說過,站在風口上,豬都能飛起來;C語言就是那頭豬,不管它好不好,反正它飛起來了。

C語言在計算機產業大爆發階段被萬人膜拜,無疑會成為整個軟件產業的基礎,擁有核心地位。
軟件行業的很多細分學科都是基于C語言的,學習[數據結構]、算法、操作系統、編譯原理等都離不開C語言,所以大學將C語言作為一門公共課程,計算機相關專業的同學都要學習。
C語言被譽為“上帝語言”,它不但奠定了軟件產業的基礎,還創造了很多其它語言,例如:
* PHP、Python 等都是用C語言開發出來的,雖然平時做項目的時候看不到C語言的影子,但是如果想深入學習 PHP 和 Python,那就要有C語言基礎了。
* C++ 和 Objective-C 干脆在C語言的基礎上直接進行擴展,增加一些新功能后變成了新的語言,所以學習 C++ 和 Objective-C 之前也要先學習C語言。
C語言是有史以來最為重要的編程語言:要進入編程行業高手級別必學C語言,要掙大錢必學C語言,要做黑客、紅客必學C語言,要面試名企、外企、高薪職位必學C語言。
- 空白目錄
- 第一章 c語言簡介
- 1 通俗地理解什么是編程語言
- 2 C語言究竟是一門怎樣的語言
- 第二章 算法簡介&基本語法
- 1 算法簡介
- 2 C 程序結構
- 3 C 基本語法
- 第三章 數據類型
- 1 數據類型
- 2 變量
- 3 常量
- 第四章 運算符
- 1 算術運算符
- 2 關系運算符
- 3 邏輯運算符
- 4 位運算符
- 5 賦值運算符
- 6 雜項運算符(其他運算符)
- 7 c語言中的運算符優先級
- 第五章 控制流
- 1 判斷語句
- 2 switch語句
- 3 循環語句
- 4 流程控制相關案例
- 第六章 指針
- 1 c語言指針概述
- 2 指針的算術運算
- 3 指針數組
- 4 指向指針的指針
- 5 傳遞指針給函數
- 6 從函數返回指針
- 第七章 函數
- 1 函數的語法
- 2 作用域規則
- 3 形參與實參
- 第八章 數組
- 1 C語言中的數組
- 2 多維數組
- 3 傳遞數組給函數
- 4 從函數返回數組
- 第九章 指針
- 1 分鐘徹底理解C語言指針的概念
- 2 C語言指針變量的定義和使用
- 3 C語言指針變量的運算(加法、減法和比較運算)
- 4 C語言數組指針(指向數組的指針)
- 5 C語言字符串指針(指向字符串的指針)
- 第十章 結構體
- 第十一章 練習
- 第十二章 文件操作
- 第十三章 文件操作2