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