字符串
學習時間:1.5W(“W ”周,下同)
知識點checklist 1、strlen()函數的返回值是什麼類型的? size_t類型 一種和機器相關的unsigned類型。類似的還有wchar_t,ptrdiff_t.。在新標準中wchar_t已經成爲一個新的類型關鍵字。 2、字符串strlen()的值,是否和他佔據的內存空間相同? 少1. 3、你是否知道strcpy函數存在的潛在風險?如何避免? 源字符串必須是以"\0"做結尾。目標字符串空間應該大於源字符串。 4、如果一個字符串沒有字符串結束符,而調用str開頭的庫函數,會發生什麼? 一直往下之下直到找到空字符。 5、Strcpy(),strcat(),strcmp(),strncpy(),strncat(),strncmp()內部到底是如何運行的?這些函數到底對源字符串和目標字符串做了些什麼?你是否觀察過它們運行時兩個字符串內存的變化? 使用指針來實現的 6、上面這些函數使用時,各有哪些需要注意的地方? 7、你會幾種字符串查找操作? 8、c語言中有字符串這個數據類型嗎?沒有 只有字符數組 9、對字符串進行操作的時候,是否爲字符串結尾符預留存儲位置?不然的話容易造成非常訪問內存。 |
數組
學習時間:2W
知識點checklist 1、 你肯定知道,定義“int a[10]; ”, a[10] 這個元素是無效的。 2、 你知道幾種數組初始化的方法? a直接單個的賦值b內存拷貝或者字符串拷貝賦值c直接把字符串賦值給字符數組。 3、 數組和指針有千絲萬縷的聯繫而又不同,你是否對他們在不同情況下的使用進行過詳細的總結? 4、 “int calendar[10][20]; ”,這是一個什麼樣的數組?它擁有 10 數組類型的元素,還是 20 個? 5、 “int a[10]; ”,數組名 a 在本質上是一個什麼?你是否打印過 a 的值? 常量指針 6、 你知道幾種獲取數組某元素的方法? 數組下標和指針記數訪問 7、 指針和數組相同嗎?什麼時候相同?什麼時候不同? 大多數時候都相同 8、 用指針和下標訪問數組元素,那種方式更快? 指針(原因未查) |
結構體
學習時間:1W
知識點checklist 1、你知道什麼是位域結構體嗎?如何定義它?如何使用它? 2、你知道字節對齊對結構體佔用內存空間大小的影響嗎?如何計算結構體佔用內存的大小? |
宏
學習時間:1W
知識點checklist 1、你知道宏的本質是什麼嗎?函數?語句?類型定義?或者其他? 2、你知道語言設計者爲什麼設計宏嗎?這些原因目前是否仍然成立? 3、你會設計帶有參數的宏嗎? 4、你知道使用宏的參數的的時候的注意事項嗎? 5、你會設計帶有可變參數的宏嗎? 6、你知道使用宏有什麼劣勢嗎? 7、你有沒有更好的替代方案? |
枚舉
學習時間:0.5 W
知識點checklist 1、是否可以指定枚舉中各項的值? 2、如果不指定值,枚舉的第一個值是多少? 3、枚舉的值是否可以是負數? 4、定義枚舉的時候,你是否專門定義了枚舉的最小值和最大值? |
Switch
學習時間:0.5 W
知識點checklist 1、switch(c)中的c 的數據類型有哪些? 2、你是否在所有的switch中都加了 default 語句? 3、是否在所有的case中都加了 break 語句(一般情況的做法)?如果你不加 break ,將會發生什麼? |
Static
學習時間:1W
知識點checklist 1、 static的三個主要作用是什麼? 2、 static的修飾的局部變量是保存在什麼地方的?全局變量哪 ? 3、 static修飾的全局變量和函數,在其他的文件中是否可以訪問?如何訪問? 4、 你知道static 是 c 語言中實現封裝和隱藏的利器嗎?你是否經常使用? 5、 定義在不同源文件中的static 全局變量,編譯器是否允許他們的變量名稱相同?他們在內存中的地址是否相同?函數那? |
const
學習時間:1W
知識點checklist 1、你是否經常使用const來表明不能夠被更改的變量? 2、你是否經常使用const常量來代替宏? 3、下面四種情況,你知道是各表示什麼意思嗎? int i_value= 10; const int* pvalue = &i_value int const *pvalue = &i_value
const int* const pvalue = &i_value 4、你知道const常量如何初始化嗎? |
Sizeof
學習時間:1W
知識點checklist 1、 對於字符數組,strlen 和 sizeof 的值是否相同? 2、 S izeof本質上是函數還是宏? 3、 S izeof的返回值是什麼類型? |
指針
學習時間:3W
知識點checklist 1、 “int *p; ” &p , p , *p 他們的值分別表示什麼含義? 2、 你定義的指針初始化了沒? 3、 你理解指針的指針的概念嗎?你會使用嗎? 4、 “int *pi_value; pi_value = 0x100000; ” pi_value + 1的值是是多少? 5、 你會定義函數指針嗎? 6、 你會使用函數指針調用函數嗎? 7、 關於指針和數組,請參見知識點數組。 |
動態分配內存
學習時間:1W
知識點checklist 1、 動態分配的內存是保存在什麼地方的? 2、 什麼情況下使用動態分配內存? 3、 動態申請內存一定要釋放,否則會內存泄露。你是否使用過內存檢測工具? |
函數
學習時間:1W
知識點checklist 1、 如何查看函數在內存中的地址? 2、 如何給一個函數指針賦值? 3、 你是否會定義可變入參函數 4、 你是否可以區分函數的形參與實參? 5、 如何定義函數名,以準確的表達函數的用途? 6、 你是否使用const 來修飾函數入參和返回值,以表的特定的含義? 7、 遞歸如何使用? |
變量
學習時間:1W
知識點checklist 1、 全局變量,局部變量,常量分別保存在內存中的什麼地方? 2、 不同類型的變量,你是否知道其作用域? 3、 全局變量和局部變量是否可以重名?你是否在這樣做? 4、 局部變量在函數退出後是否有效,爲什麼? 5、 全局變量爲什麼不允許定義在頭文件中?有何危害? |
鏈接(linux)
學習時間:1W
知識點checklist 1、 鏈接位於編譯過程的那個階段? 2、 動態鏈接庫和靜態鏈接庫使用時有何區別? 3、 如何 對 動態鏈接庫 進行 動態加載 (不用重啓程序而加載鏈接庫)? 4、 動態鏈接有何優點? 5、 動態鏈接庫中是否定義了非static 的全局變量?你是否知道這是一個非常危險的動作? 6、 動態庫中的全局變量(非static )和函數(非 static )是否可以和上層全局變量和函數重名?重名後會發生什麼事情? |
運行時的數據結構(linux)
學習時間:1W
知識點checklist 1、你知道什麼是段的概念嗎? 2、可執行程序可以分爲幾個段?每個段保存的是什麼內容? 3、如何查看可執行程序各個段的大小? 4、當函數被調用時發生了什麼? 5、你有沒有試過程序的棧空間最大有多大?程序超過此大小會發生什麼? 6、你使用的系統的棧是向下生長的,還是向上生長的? |
Include
學習時間:0.5 W
知識點checklist 1、如何避免對同一頭文件的多次include? |
聲明
學習時間:1 W
知識點checklist 1、什麼是 聲明 ,什麼是定義? 2、你是否會運用c語言聲明的優先級規則? |