c語言應該怎麼學習?如何學習c語言,在學習C語言的時候一定要掌握什麼知識?在這裡我給大家寫出了一點點小計劃,不喜勿噴,謝謝,我來為大家科普一下關于c語言應該怎麼學習?以下内容希望對你有幫助!
如何學習c語言,在學習C語言的時候一定要掌握什麼知識?在這裡我給大家寫出了一點點小計劃,不喜勿噴,謝謝!
一、要學習的書《C Primer Plus》、《C缺陷和陷阱》、《C和指針》、《C專家編程》。
二、知識點學習1.字符串1、 strlen()函數的返回值是什麼類型的?
2、 字符串strlen() 的值,是否和他占據的内存空間相同?
3、 你是否知道Strcpy 函數存在的潛在風險?如何避免?
4、 如果一個字符串沒有字符串結束符,而調用str 開頭的庫克,會發生什麼?
5、 Strcpy(),strcat(),strcmp(),strncpy(),strncat(),strncmp()内部到底是如何運行的?這些函數到底對源字符串和目标字符串做了些什麼?你是否觀察過它們運行時兩個字符串内存的變化?
6、 上面這些函數使用時,各有哪些需要注意的地方?
7、 你會幾種字符串查找操作?
8、 c語言中有字符串這個數據類型嗎?
9、 對字符串進行操作的時候,是否為字符串結尾符預留存儲位置?不然的話容易造成非常訪問内存。
2.數組1、 你肯定知道,定義“int a[10]; ”, a[10] 這個元素是無效的。
2、 你知道幾種數組初始化的方法?
3、 數組和指針有千絲萬縷的聯系而又不同,你是否對他們在不同情況下的使用進行過詳細的總結?
4、 “int calendar[10][20]; ”,這是一個什麼樣的數組?它擁有 10 數組類型的元素,還是 20 個?
5、 “int a[10]; ”,數組名 a 在本質上是一個什麼?你是否打印過 a 的值?
6、 你知道幾種獲取數組某元素的方法?
7、 指針和數組相同嗎?什麼時候相同?什麼時候不同?
8、 用指針和下标訪問數組元素,那種方式更快?
3.結構體1、 你知道什麼是位域結構體嗎?如何定義它?如何使用它?
2、 你知道字節對齊對結構體占用内存空間大小的影響嗎?如何計算結構體占用内存的大小?
4.宏1、 你知道宏的本質是什麼嗎?函數?語句?類型定義?或者其他?
2、 你知道語言設計者為什麼設計宏大嗎?這些原因目前是否仍然成立?
3、 你會設計帶有參數的宏嗎?
4、 你知道使用宏的參數的時候的注意事項嗎?
5、 你會設計帶有可變參數的宏嗎?
6、 你知道使用宏有什麼劣勢嗎?
7、 你有沒有更好的替代方案?
5.枚舉1、 是否可以指定枚舉中各項的值?
2、 如果不指定值,枚舉的第一個值是多少?
3、 枚舉的值是否可以是負數?
4、 定義枚舉的時候,你是否專門定義了枚舉的最小值和最大值?
6.switch1、 switch(c)中的 c 的數據類型有哪些?
2、 你是否在所有的switch 中都加了 default 語句?
3、 是否在所有的case 中都加了 break 語句(一般情況的做法)?如果你不加 break ,将會發生什麼?
7.static1、 static的三個主要作用是什麼?
2、 static的修飾的局部變量是保存在什麼地方的?全局變量哪 ?
3、 static修飾的全局變量和函數,在其他的文件中是否可以訪問?如何訪問?
4、 你知道static 是 c 語言中是實現封裝和隐藏的利器嗎?你是否經常使用?
5、 定義在不同源文件中的static 全局變量,編譯器是否允許他們的變量名稱相同?他們在内存中的地址是否相同?函數那?
8.const1、 你是否經常使用const 來表明不能夠被更改的變量?
2、 你是否經常使用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.sizeof1、 對于字符數組,strlen 和 sizeof 的值是否相同?
2、 S izeof本質上是函數還是宏?
3、 S izeof的返回值是什麼類型?
10.指針1、 “int *p; ” &p , p , *p 他們的值分别表示什麼含義?
2、 你定義的指針初始化了沒?
3、 你理解指針的指針的概念嗎?你會使用嗎?
4、 “int *pi_value; pi_value = 0x100000; ” pi_value 1 的值是是多少?
5、 你會定義函數指針嗎?
6、 你會使用函數指針調用函數嗎?
7、 關于指針和數組,請參見知識點數組。
11.動态分配内存1、 動态分配的内存是保存在什麼地方的?
2、 什麼情況下使用動态分配内存?
3、 動态申請内存一定要釋放,否則會内存洩露。你是否使用過内存檢測工具?
12.函數1、 如何查看函數在内存中的地址?
2、 如何給一個函數指針賦值?
3、 你是否會定義可變入參函數
4、 你是否可以區分函數的形參與實參?
5、 如何定義函數名,以準确的表達函數的用途?
6、 你是否使用const 來修飾函數入參和返回值,以表的特定的含義?
7、 遞歸如何使用?
13.變量1、 全局變量,局部變量,常量分别保存在内存中的什麼地方?
2、 不同類型的變量,你是否知道其作用域?
3、 全局變量和局部變量是否可以重名?你是否在這樣做?
4、 局部變量在函數退出後是否有效,為什麼?
5、 全局變量為什麼不允許定義在頭文件中?有何危害?
14.連接(Linux)1、 鍊接位于編譯過程的那個階段?
2、 動态鍊接庫和靜态鍊接庫使用時有何區别?
3、 如何 對 動态鍊接庫 進行 動态加載 (不用重啟程序而加載鍊接庫)?
4、 動态鍊接有何優點?
5、 動态鍊接庫中是否定義了非static 的全局變量?你是否知道這是一個非常危險的動作?
6、 動态庫中的全局變量(非static )和函數(非 static )是否可以和上層全局變量和函數重名?重名後會發生什麼事情?
15.運行時的數據結構(Linux)1、 你知道什麼是段的概念嗎?
2、 可執行程序可以分為幾個段?每個段保存的是什麼内容?
3、 如何查看可執行程序各個段的大小?
4、 當函數被調用時發生了什麼?
5、 你有沒有試過程序的棧空間最大有多大?程序超過此大小會發生什麼?
6、 你使用的系統的棧是向下生長的,還是向上生長的?
16.include1、 如何避免對同一頭文件的多次include ?
17.聲明1、 什麼是 聲明 ,什麼是定義?
2、 你是否會運用c 語言聲明的優先級規則?
18.關于 複雜度 :1、 軟件的首要技術使命 是 管理複雜度。
2、 優秀程序員的 一個特質 是将複雜的事情簡單化,而非将簡單的問題複雜化。所以,他們一般會選擇簡單的解決方案。
3、 極盡機巧,複雜的解決方案,除了将新手搞得暈頭轉向之外,别無他用。
4、 閱讀優秀程序員的代碼,是一種享受,你很少遇到思維的阻力,你可以盡情的享受簡單之美。
這些是C/C 能做的
服務器開發工程師、人工智能、雲計算工程師、信息安全(黑客反黑客)、大數據 、數據平台、嵌入式工程師、流媒體服務器、數據控解、圖像處理、音頻視頻開發工程師、遊戲服務器、分布式系統、遊戲輔助等。
對于熱愛編程的人來說,有一群一起學習一起解答的小夥伴很重要!如果你想更好的提升你的編程核心能力(内功)不妨從現在開始!
編程學習書籍分享:
編程學習視頻分享:
整理分享(多年學習的源碼、項目實戰視頻、項目筆記,基礎入門教程)
歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比自己琢磨更快哦!
對于C/C 感興趣可以關注小編在後台私信我:【編程交流】一起來學習哦!可以領取一些C/C 的項目學習視頻資料哦!已經設置好了關鍵詞自動回複,自動領取就好了!
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!