如何學(xué)習(xí)C語(yǔ)言,在學(xué)習(xí)C語(yǔ)言的時(shí)候一定要掌握什么知識(shí)?在這里我給大家寫(xiě)出了一點(diǎn)點(diǎn)小計(jì)劃,不喜勿噴,謝謝!一、要學(xué)習(xí)的書(shū)《CPrimerPlus》、《C缺陷和陷阱》、《C和指針》、《C專(zhuān)家編程》。二、知識(shí)點(diǎn)學(xué)習(xí)1.字符串1、strlen()函
如何學(xué)習(xí)C語(yǔ)言,在學(xué)習(xí)C語(yǔ)言的時(shí)候一定要掌握什么知識(shí)?在這里我給大家寫(xiě)出了一點(diǎn)點(diǎn)小計(jì)劃,不喜勿噴,謝謝!

一、要學(xué)習(xí)的書(shū)
《C Primer Plus》、《C缺陷和陷阱》、《C和指針》、《C專(zhuān)家編程》。
二、知識(shí)點(diǎn)學(xué)習(xí)
1.字符串
1、 strlen()函數(shù)的返回值是什么類(lèi)型的?
2、 字符串strlen() 的值,是否和他占據(jù)的內(nèi)存空間相同?
3、 你是否知道strcpy 函數(shù)存在的潛在風(fēng)險(xiǎn)?如何避免?
4、 如果一個(gè)字符串沒(méi)有字符串結(jié)束符,而調(diào)用str 開(kāi)頭的庫(kù)克,會(huì)發(fā)生什么?
5、 Strcpy(),strcat(),strcmp(),strncpy(),strncat(),strncmp()內(nèi)部到底是如何運(yùn)行的?這些函數(shù)到底對(duì)源字符串和目標(biāo)字符串做了些什么?你是否觀察過(guò)它們運(yùn)行時(shí)兩個(gè)字符串內(nèi)存的變化?
6、 上面這些函數(shù)使用時(shí),各有哪些需要注意的地方?
7、 你會(huì)幾種字符串查找操作?
8、 c語(yǔ)言中有字符串這個(gè)數(shù)據(jù)類(lèi)型嗎?
9、 對(duì)字符串進(jìn)行操作的時(shí)候,是否為字符串結(jié)尾符預(yù)留存儲(chǔ)位置?不然的話(huà)容易造成非常訪問(wèn)內(nèi)存。
2.數(shù)組
1、 你肯定知道,定義“int a[10]; ”, a[10] 這個(gè)元素是無(wú)效的。
2、 你知道幾種數(shù)組初始化的方法?
3、 數(shù)組和指針有千絲萬(wàn)縷的聯(lián)系而又不同,你是否對(duì)他們?cè)诓煌闆r下的使用進(jìn)行過(guò)詳細(xì)的總結(jié)?
4、 “int calendar[10][20]; ”,這是一個(gè)什么樣的數(shù)組?它擁有 10 數(shù)組類(lèi)型的元素,還是 20 個(gè)?
5、 “int a[10]; ”,數(shù)組名 a 在本質(zhì)上是一個(gè)什么?你是否打印過(guò) a 的值?
6、 你知道幾種獲取數(shù)組某元素的方法?
7、 指針和數(shù)組相同嗎?什么時(shí)候相同?什么時(shí)候不同?
8、 用指針和下標(biāo)訪問(wèn)數(shù)組元素,那種方式更快?
3.結(jié)構(gòu)體
1、 你知道什么是位域結(jié)構(gòu)體嗎?如何定義它?如何使用它?
2、 你知道字節(jié)對(duì)齊對(duì)結(jié)構(gòu)體占用內(nèi)存空間大小的影響嗎?如何計(jì)算結(jié)構(gòu)體占用內(nèi)存的大小?
4.宏
1、 你知道宏的本質(zhì)是什么嗎?函數(shù)?語(yǔ)句?類(lèi)型定義?或者其他?
2、 你知道語(yǔ)言設(shè)計(jì)者為什么設(shè)計(jì)宏大嗎?這些原因目前是否仍然成立?
3、 你會(huì)設(shè)計(jì)帶有參數(shù)的宏嗎?
4、 你知道使用宏的參數(shù)的時(shí)候的注意事項(xiàng)嗎?
5、 你會(huì)設(shè)計(jì)帶有可變參數(shù)的宏嗎?
6、 你知道使用宏有什么劣勢(shì)嗎?
7、 你有沒(méi)有更好的替代方案?
5.枚舉
1、 是否可以指定枚舉中各項(xiàng)的值?
2、 如果不指定值,枚舉的第一個(gè)值是多少?
3、 枚舉的值是否可以是負(fù)數(shù)?
4、 定義枚舉的時(shí)候,你是否專(zhuān)門(mén)定義了枚舉的最小值和最大值?
6.switch
1、 switch(c)中的 c 的數(shù)據(jù)類(lèi)型有哪些?
2、 你是否在所有的switch 中都加了 default 語(yǔ)句?
3、 是否在所有的case 中都加了 break 語(yǔ)句(一般情況的做法)?如果你不加 break ,將會(huì)發(fā)生什么?
7.static
1、 static的三個(gè)主要作用是什么?
2、 static的修飾的局部變量是保存在什么地方的?全局變量哪 ?
3、 static修飾的全局變量和函數(shù),在其他的文件中是否可以訪問(wèn)?如何訪問(wèn)?
4、 你知道static 是 c 語(yǔ)言中是實(shí)現(xiàn)封裝和隱藏的利器嗎?你是否經(jīng)常使用?
5、 定義在不同源文件中的static 全局變量,編譯器是否允許他們的變量名稱(chēng)相同?他們?cè)趦?nèi)存中的地址是否相同?函數(shù)那?
8.const
1、 你是否經(jīng)常使用const 來(lái)表明不能夠被更改的變量?
2、 你是否經(jīng)常使用const 常量來(lái)代替宏?
3、 下面四種情況,你知道是各自表示什么意思嗎?
int i_value= 10;
const int* pvalue = & i_value
int const *pvalue = & i_value
int* const pvalue=& i_value
const int* const pvalue =& i_value
4、 你知道const 常量如何初始化嗎?
9.sizeof
1、 對(duì)于字符數(shù)組,strlen 和 sizeof 的值是否相同?
2、 S izeof本質(zhì)上是函數(shù)還是宏?
3、 S izeof的返回值是什么類(lèi)型?
10.指針
1、 “int *p; ” &p , p , *p 他們的值分別表示什么含義?
2、 你定義的指針初始化了沒(méi)?
3、 你理解指針的指針的概念嗎?你會(huì)使用嗎?
4、 “int *pi_value; pi_value = 0x100000; ” pi_value + 1 的值是是多少?
5、 你會(huì)定義函數(shù)指針嗎?
6、 你會(huì)使用函數(shù)指針調(diào)用函數(shù)嗎?
7、 關(guān)于指針和數(shù)組,請(qǐng)參見(jiàn)知識(shí)點(diǎn)數(shù)組。
11.動(dòng)態(tài)分配內(nèi)存
1、 動(dòng)態(tài)分配的內(nèi)存是保存在什么地方的?
2、 什么情況下使用動(dòng)態(tài)分配內(nèi)存?
3、 動(dòng)態(tài)申請(qǐng)內(nèi)存一定要釋放,否則會(huì)內(nèi)存泄露。你是否使用過(guò)內(nèi)存檢測(cè)工具?
12.函數(shù)
1、 如何查看函數(shù)在內(nèi)存中的地址?
2、 如何給一個(gè)函數(shù)指針賦值?
3、 你是否會(huì)定義可變?nèi)雲(yún)⒑瘮?shù)
4、 你是否可以區(qū)分函數(shù)的形參與實(shí)參?
5、 如何定義函數(shù)名,以準(zhǔn)確的表達(dá)函數(shù)的用途?
6、 你是否使用const 來(lái)修飾函數(shù)入?yún)⒑头祷刂担员淼奶囟ǖ暮x?
7、 遞歸如何使用?
13.變量
1、 全局變量,局部變量,常量分別保存在內(nèi)存中的什么地方?
2、 不同類(lèi)型的變量,你是否知道其作用域?
3、 全局變量和局部變量是否可以重名?你是否在這樣做?
4、 局部變量在函數(shù)退出后是否有效,為什么?
5、 全局變量為什么不允許定義在頭文件中?有何危害?
14.連接(Linux)
1、 鏈接位于編譯過(guò)程的那個(gè)階段?
2、 動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù)使用時(shí)有何區(qū)別?
3、 如何 對(duì) 動(dòng)態(tài)鏈接庫(kù) 進(jìn)行 動(dòng)態(tài)加載 (不用重啟程序而加載鏈接庫(kù))?
4、 動(dòng)態(tài)鏈接有何優(yōu)點(diǎn)?
5、 動(dòng)態(tài)鏈接庫(kù)中是否定義了非static 的全局變量?你是否知道這是一個(gè)非常危險(xiǎn)的動(dòng)作?
6、 動(dòng)態(tài)庫(kù)中的全局變量(非static )和函數(shù)(非 static )是否可以和上層全局變量和函數(shù)重名?重名后會(huì)發(fā)生什么事情?
15.運(yùn)行時(shí)的數(shù)據(jù)結(jié)構(gòu)(Linux)
1、 你知道什么是段的概念嗎?
2、 可執(zhí)行程序可以分為幾個(gè)段?每個(gè)段保存的是什么內(nèi)容?
3、 如何查看可執(zhí)行程序各個(gè)段的大小?
4、 當(dāng)函數(shù)被調(diào)用時(shí)發(fā)生了什么?
5、 你有沒(méi)有試過(guò)程序的棧空間最大有多大?程序超過(guò)此大小會(huì)發(fā)生什么?
6、 你使用的系統(tǒng)的棧是向下生長(zhǎng)的,還是向上生長(zhǎng)的?
16.Include
1、 如何避免對(duì)同一頭文件的多次include ?
17.聲明
1、 什么是 聲明 ,什么是定義?
2、 你是否會(huì)運(yùn)用c 語(yǔ)言聲明的優(yōu)先級(jí)規(guī)則?
18.關(guān)于 復(fù)雜度 :
1、 軟件的首要技術(shù)使命 是 管理復(fù)雜度。
2、 優(yōu)秀程序員的 一個(gè)特質(zhì) 是將復(fù)雜的事情簡(jiǎn)單化,而非將簡(jiǎn)單的問(wèn)題復(fù)雜化。所以,他們一般會(huì)選擇簡(jiǎn)單的解決方案。
3、 極盡機(jī)巧,復(fù)雜的解決方案,除了將新手搞得暈頭轉(zhuǎn)向之外,別無(wú)他用。
4、 閱讀優(yōu)秀程序員的代碼,是一種享受,你很少遇到思維的阻力,你可以盡情的享受簡(jiǎn)單之美。
這些是C/C++能做的
服務(wù)器開(kāi)發(fā)工程師、人工智能、云計(jì)算工程師、信息安全(黑客反黑客)、大數(shù)據(jù) 、數(shù)據(jù)平臺(tái)、嵌入式工程師、流媒體服務(wù)器、數(shù)據(jù)控解、圖像處理、音頻視頻開(kāi)發(fā)工程師、游戲服務(wù)器、分布式系統(tǒng)、游戲輔助等。
對(duì)于熱愛(ài)編程的人來(lái)說(shuō),有一群一起學(xué)習(xí)一起解答的小伙伴很重要!如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開(kāi)始!
編程學(xué)習(xí)書(shū)籍分享:
編程學(xué)習(xí)視頻分享:
整理分享(多年學(xué)習(xí)的源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門(mén)教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!
對(duì)于C/C++感興趣可以關(guān)注小編在后臺(tái)私信我:【編程交流】一起來(lái)學(xué)習(xí)哦!可以領(lǐng)取一些C/C++的項(xiàng)目學(xué)習(xí)視頻資料哦!已經(jīng)設(shè)置好了關(guān)鍵詞自動(dòng)回復(fù),自動(dòng)領(lǐng)取就好了!