當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 大魚機(jī)器人
[導(dǎo)讀]關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容C語(yǔ)言應(yīng)該是絕大部分同學(xué)的編程第一課。對(duì)于非CS專業(yè)的同學(xué),學(xué)C語(yǔ)言主要是掌握一些基本的編程方法,C語(yǔ)言只是媒介。但是對(duì)于CS科班的同學(xué),C語(yǔ)言是后續(xù)的計(jì)組、體系結(jié)構(gòu)、操作系統(tǒng)、編譯原理等課程的基石,對(duì)于C語(yǔ)言本身甚至程序設(shè)計(jì)語(yǔ)言基礎(chǔ)原理的深入理解都...

關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容

  • C 語(yǔ)言應(yīng)該是絕大部分同學(xué)的編程第一課。

  • 對(duì)于非 CS 專業(yè)的同學(xué),學(xué) C 語(yǔ)言主要是掌握一些基本的編程方法,C 語(yǔ)言只是媒介。

  • 但是對(duì)于 CS 科班的同學(xué),C 語(yǔ)言是后續(xù)的計(jì)組、體系結(jié)構(gòu)、操作系統(tǒng)、編譯原理等課程的基石,對(duì)于 C 語(yǔ)言本身甚至程序設(shè)計(jì)語(yǔ)言基礎(chǔ)原理的深入理解都是應(yīng)該掌握的。

一、一圖勝千言

如果你不想看冗余的文字,直接看我畫的這個(gè)思維導(dǎo)圖即可:

二、C 語(yǔ)言易學(xué)難精?

很多同學(xué)都反映 C 語(yǔ)言難。

實(shí)際上,相比 C 、Java 之類的更加現(xiàn)代的語(yǔ)言, C 語(yǔ)言本身的語(yǔ)法特性非常少,不像 C 成了一鍋大雜燴。

C 語(yǔ)言本身只包含了編程語(yǔ)言最基本的語(yǔ)法,比如變量、if、else、for、while、枚舉、結(jié)構(gòu)體等,外加一個(gè)指針。

但是為什么大家都覺得難呢?

說(shuō)下我大一時(shí)覺得難的原因吧,主要兩點(diǎn):

1. 庫(kù)太少,太原始

用 C 語(yǔ)言寫個(gè)稍微復(fù)雜點(diǎn)的項(xiàng)目,你需要上來(lái)先把數(shù)據(jù)結(jié)構(gòu)、常見算法先實(shí)現(xiàn)一遍,更別說(shuō)字符串,序列化這些了。

比如 Redis 里 SDS、LIST、ZSET、HASH等。

這其實(shí)對(duì)新手極其的不友好。

想做點(diǎn)有趣的東西,來(lái),先寫個(gè)鏈表?

而在 Java 里直接 New 一個(gè) LinkedLits、HashMap,簡(jiǎn)直不要太高效。

再到后來(lái),學(xué)了 Python,才發(fā)現(xiàn)這才是編程的高級(jí)形態(tài),寫個(gè)爬蟲直接 import xx,幾句話就完事了。

而在 C 語(yǔ)言里,你需要裸寫 Socket 發(fā)網(wǎng)絡(luò)包,還要解析 HTTP 協(xié)議,還要序列化 JSON,處理 HTTPS 這些(當(dāng)然,你也可以導(dǎo)入庫(kù),但是由于 C/C 弱雞等同于沒有的包管理,也挺麻煩的。

這就是新手學(xué) C 容易被勸退的原因,做不出好玩的東西,全是一堆黑框框。

2. 內(nèi)存、指針

另外,常另 C 語(yǔ)言初學(xué)者感到頭疼的就是指針了。

指針其實(shí)本身不難,就是變量的地址嘛。

但是問(wèn)題在于地址是個(gè)什么東西?

理解地址,就需要理解內(nèi)存,但是鑒于大多數(shù)同學(xué)學(xué)習(xí) C 語(yǔ)言,都是在大一,那時(shí)候沒有計(jì)算機(jī)基礎(chǔ)知識(shí),其實(shí)理解起來(lái)還是稍微吃力的。

內(nèi)存,其實(shí)也很簡(jiǎn)單啊,你就把它當(dāng)做一個(gè)黑盒,提供了讀和寫的能力。

就像快遞柜一樣,提供了存東西、放東西的能力:

讀哪里?寫哪里?

當(dāng)然是需要地址啊,地址就跟快遞柜上的編號(hào)一樣,而快遞柜格子里就相對(duì)于內(nèi)存中真正存放的內(nèi)容。

記住這張快遞柜的照片,其實(shí)指針你就理解了。

什么是二級(jí)指針?

就是快遞柜格子里放的是另外一個(gè)格子的編號(hào),對(duì)應(yīng)到 C 語(yǔ)言舉個(gè)例子:

int?a?=?10;
int?*pa?=?
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉