你知道怎樣學(xué)習(xí)C語言嗎?
如何學(xué)習(xí)C語言,在學(xué)習(xí)C語言的時候一定要掌握什么知識?在這里我給大家寫出了一點點小計劃,不喜勿噴,謝謝!

一、要學(xué)習(xí)的書
《C Primer Plus》、《C缺陷和陷阱》、《C和指針》、《C專家編程》。
二、知識點學(xué)習(xí)
1.字符串
1、 strlen()函數(shù)的返回值是什么類型的?
2、 字符串strlen() 的值,是否和他占據(jù)的內(nèi)存空間相同?
3、 你是否知道strcpy 函數(shù)存在的潛在風(fēng)險?如何避免?
4、 如果一個字符串沒有字符串結(jié)束符,而調(diào)用str 開頭的庫函數(shù),會發(fā)生什么?
5、 Strcpy(),strcat(),strcmp(),strncpy(),strncat(),strncmp()內(nèi)部到底是如何運行的?這些函數(shù)到底對源字符串和目標字符串做了些什么?你是否觀察過它們運行時兩個字符串內(nèi)存的變化?
6、 上面這些函數(shù)使用時,各有哪些需要注意的地方?
7、 你會幾種字符串查找操作?
8、 c語言中有字符串這個數(shù)據(jù)類型嗎?
9、 對字符串進行操作的時候,是否為字符串結(jié)尾符預(yù)留存儲位置?不然的話容易造成非常訪問內(nèi)存。

2.數(shù)組
1、 你肯定知道,定義“int a[10]; ”, a[10] 這個元素是無效的。
2、 你知道幾種數(shù)組初始化的方法?
3、 數(shù)組和指針有千絲萬縷的聯(lián)系而又不同,你是否對他們在不同情況下的使用進行過詳細的總結(jié)?
4、 “int calendar[10][20]; ”,這是一個什么樣的數(shù)組?它擁有 10 數(shù)組類型的元素,還是 20 個?
5、 “int a[10]; ”,數(shù)組名 a 在本質(zhì)上是一個什么?你是否打印過 a 的值?
6、 你知道幾種獲取數(shù)組某元素的方法?
7、 指針和數(shù)組相同嗎?什么時候相同?什么時候不同?
8、 用指針和下標訪問數(shù)組元素,那種方式更快?
3.結(jié)構(gòu)體
1、 你知道什么是位域結(jié)構(gòu)體嗎?如何定義它?如何使用它?
2、 你知道字節(jié)對齊對結(jié)構(gòu)體占用內(nèi)存空間大小的影響嗎?如何計算結(jié)構(gòu)體占用內(nèi)存的大小?
4.宏
1、 你知道宏的本質(zhì)是什么嗎?函數(shù)?語句?類型定義?或者其他?
2、 你知道語言設(shè)計者為什么設(shè)計宏嗎?這些原因目前是否仍然成立?
3、 你會設(shè)計帶有參數(shù)的宏嗎?
4、 你知道使用宏的參數(shù)的的時候的注意事項嗎?
5、 你會設(shè)計帶有可變參數(shù)的宏嗎?
6、 你知道使用宏有什么劣勢嗎?
7、 你有沒有更好的替代方案?
5.枚舉
1、 是否可以指定枚舉中各項的值?
2、 如果不指定值,枚舉的第一個值是多少?
3、 枚舉的值是否可以是負數(shù)?
4、 定義枚舉的時候,你是否專門定義了枚舉的最小值和最大值?
6.switch
1、 switch(c)中的 c 的數(shù)據(jù)類型有哪些?
2、 你是否在所有的switch 中都加了 default 語句?
3、 是否在所有的case 中都加了 break 語句(一般情況的做法)?如果你不加 break ,將會發(fā)生什么?
7.static
1、 static的三個主要作用是什么?
2、 static的修飾的局部變量是保存在什么地方的?全局變量哪 ?
3、 static修飾的全局變量和函數(shù),在其他的文件中是否可以訪問?如何訪問?
4、 你知道static 是 c 語言中實現(xiàn)封裝和隱藏的利器嗎?你是否經(jīng)常使用?
5、 定義在不同源文件中的static 全局變量,編譯器是否允許他們的變量名稱相同?他們在內(nèi)存中的地址是否相同?函數(shù)那?
8.const
1、 你是否經(jīng)常使用const 來表明不能夠被更改的變量?
2、 你是否經(jīng)常使用const 常量來代替宏?
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、 對于字符數(shù)組,strlen 和 sizeof 的值是否相同?
2、 S izeof本質(zhì)上是函數(shù)還是宏?
3、 S izeof的返回值是什么類型?
10.指針
1、 “int *p; ” &p , p , *p 他們的值分別表示什么含義?
2、 你定義的指針初始化了沒?
3、 你理解指針的指針的概念嗎?你會使用嗎?
4、 “int *pi_value; pi_value = 0x100000; ” pi_value + 1 的值是是多少?
5、 你會定義函數(shù)指針嗎?
6、 你會使用函數(shù)指針調(diào)用函數(shù)嗎?
7、 關(guān)于指針和數(shù)組,請參見知識點數(shù)組。
11.動態(tài)分配內(nèi)存
1、 動態(tài)分配的內(nèi)存是保存在什么地方的?
2、 什么情況下使用動態(tài)分配內(nèi)存?
3、 動態(tài)申請內(nèi)存一定要釋放,否則會內(nèi)存泄露。你是否使用過內(nèi)存檢測工具?
12.函數(shù)
1、 如何查看函數(shù)在內(nèi)存中的地址?
2、 如何給一個函數(shù)指針賦值?
3、 你是否會定義可變?nèi)雲(yún)⒑瘮?shù)
4、 你是否可以區(qū)分函數(shù)的形參與實參?
5、 如何定義函數(shù)名,以準確的表達函數(shù)的用途?
6、 你是否使用const 來修飾函數(shù)入?yún)⒑头祷刂?,以表的特定的含義?
7、 遞歸如何使用?
13.變量
1、 全局變量,局部變量,常量分別保存在內(nèi)存中的什么地方?
2、 不同類型的變量,你是否知道其作用域?
3、 全局變量和局部變量是否可以重名?你是否在這樣做?
4、 局部變量在函數(shù)退出后是否有效,為什么?
5、 全局變量為什么不允許定義在頭文件中?有何危害?
14.連接(Linux)
1、 鏈接位于編譯過程的那個階段?
2、 動態(tài)鏈接庫和靜態(tài)鏈接庫使用時有何區(qū)別?
3、 如何 對 動態(tài)鏈接庫 進行 動態(tài)加載 (不用重啟程序而加載鏈接庫)?
4、 動態(tài)鏈接有何優(yōu)點?
5、 動態(tài)鏈接庫中是否定義了非static 的全局變量?你是否知道這是一個非常危險的動作?
6、 動態(tài)庫中的全局變量(非static )和函數(shù)(非 static )是否可以和上層全局變量和函數(shù)重名?重名后會發(fā)生什么事情?
15.運行時的數(shù)據(jù)結(jié)構(gòu)(Linux)
1、 你知道什么是段的概念嗎?
2、 可執(zhí)行程序可以分為幾個段?每個段保存的是什么內(nèi)容?
3、 如何查看可執(zhí)行程序各個段的大???
4、 當(dāng)函數(shù)被調(diào)用時發(fā)生了什么?
5、 你有沒有試過程序的??臻g最大有多大?程序超過此大小會發(fā)生什么?
6、 你使用的系統(tǒng)的棧是向下生長的,還是向上生長的?
16.Include
1、 如何避免對同一頭文件的多次include ?
17.聲明
1、 什么是 聲明 ,什么是定義?
2、 你是否會運用c 語言聲明的優(yōu)先級規(guī)則?
18.關(guān)于 復(fù)雜度 :
1、 軟件的首要技術(shù)使命 是 管理復(fù)雜度。
2、 優(yōu)秀程序員的 一個特質(zhì) 是將復(fù)雜的事情簡單化,而非將簡單的問題復(fù)雜化。所以,他們一般會選擇簡單的解決方案。
3、 極盡機巧,復(fù)雜的解決方案,除了將新手搞得暈頭轉(zhuǎn)向之外,別無他用。
4、 閱讀優(yōu)秀程序員的代碼,是一種享受,你很少遇到思維的阻力,你可以盡情的享受簡單之美。

這些是C/C++能做的
服務(wù)器開發(fā)工程師、人工智能、云計算工程師、信息安全(黑客反黑客)、大數(shù)據(jù) 、數(shù)據(jù)平臺、嵌入式工程師、流媒體服務(wù)器、數(shù)據(jù)控解、圖像處理、音頻視頻開發(fā)工程師、游戲服務(wù)器、分布式系統(tǒng)、游戲輔助等。
對于熱愛編程的人來說,有一群一起學(xué)習(xí)一起解答的小伙伴很重要!如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開始!
微信公眾號:C語言編程學(xué)習(xí)基地
整理分享(多年學(xué)習(xí)的源碼、項目實戰(zhàn)視頻、項目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長比自己琢磨更快哦!
編程學(xué)習(xí)書籍分享:

粉絲編程交流:
