字串 .5
w(「w
」周,下同)
知識點checklist
1、strlen()函式的返回值是什麼型別的?
2、字串strlen()
的值,是否和他佔據的記憶體空間相同?
3、你是否知道strcpy
函式存在的潛在風險?如何避免?
4、如果乙個字串沒有字串結束符,而呼叫str
開頭的庫函式,會發生什麼?
5、strcpy(),strcat(),strcmp(),strncpy(),strncat(),strncmp()內部到底是如何執行的?這些函式到底對源字串和目標字串做了些什麼?你是否觀察過它們執行時兩個字串記憶體的變化?
6、上面這些函式使用時,各有哪些需要注意的地方?
7、你會幾種字串查詢操作?
8、c語言中有字串這個資料型別嗎?
9、對字串進行操作的時候,是否為字串結尾符預留儲存位置?不然的話容易造成非常訪問記憶體。
陣列 知識點checklist
1、 你肯定知道,定義「int a[10];
」,a[10]
這個元素是無效的。
2、 你知道幾種陣列初始化的方法?
3、 陣列和指標有千絲萬縷的聯絡而又不同,你是否對他們在不同情況下的使用進行過詳細的總結?
4、 「int calendar[10][20];
」,這是乙個什麼樣的陣列?它擁有
10陣列型別的元素,還是
20個?
5、 「int a[10];
」,陣列名
a在本質上是乙個什麼?你是否列印過
a的值?
6、 你知道幾種獲取陣列某元素的方法?
7、 指標和陣列相同嗎?什麼時候相同?什麼時候不同?
8、 用指標和下標訪問陣列元素,那種方式更快?
結構體
知識點checklist
1、你知道什麼是位域結構體嗎?如何定義它?如何使用它?
2、你知道位元組對齊對結構體占用記憶體空間大小的影響嗎?如何計算結構體占用記憶體的大小?
巨集 知識點checklist
1、你知道巨集的本質是什麼嗎?函式?語句?型別定義?或者其他?
2、你知道語言設計者為什麼設計巨集嗎?這些原因目前是否仍然成立?
3、你會設計帶有引數的巨集嗎?
4、你知道使用巨集的引數的的時候的注意事項嗎?
5、你會設計帶有可變引數的巨集嗎?
6、你知道使用巨集有什麼劣勢嗎?
7、你有沒有更好的替代方案?
列舉 0.5w
知識點checklist
1、是否可以指定列舉中各項的值?
2、如果不指定值,列舉的第乙個值是多少?
3、列舉的值是否可以是負數?
4、定義列舉的時候,你是否專門定義了列舉的最小值和最大值?
switch
0.5w
知識點checklist
1、switch(c)中的
c的資料型別有哪些?
2、你是否在所有的switch
中都加了
default
語句?3、
是否在所有的case
中都加了
break
語句(一般情況的做法)?如果你不加
break
,將會發生什麼?
static
知識點checklist
1、 static的三個主要作用是什麼?
2、 static的修飾的區域性變數是儲存在什麼地方的?全域性變數哪
?3、
static修飾的全域性變數和函式,在其他的檔案中是否可以訪問?如何訪問?
4、 你知道static是c
語言中實現封裝和隱藏的利器嗎?你是否經常使用?
5、 定義在不同原始檔中的static
全域性變數,編譯器是否允許他們的變數名稱相同?他們在記憶體中的位址是否相同?函式那?
const
知識點checklist
1、你是否經常使用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
常量如何初始化嗎?
sizeof
知識點checklist
1、 對於字元陣列,strlen
和sizeof
的值是否相同?
2、 s
izeof本質上是函式還是巨集?
3、 s
izeof的返回值是什麼型別?指標
知識點checklist
1、 「int *p;」&p
,p,*p
他們的值分別表示什麼含義?
2、 你定義的指標初始化了沒?
3、 你理解指標的指標的概念嗎?你會使用嗎?
4、 「int *pi_value;
pi_value
= 0x100000;
」 pi_value + 1
的值是是多少?
5、 你會定義函式指標嗎?
6、 你會使用函式指標呼叫函式嗎?
7、 關於指標和陣列,請參見知識點陣列。
動態分配記憶體
知識點checklist
1、 動態分配的記憶體是儲存在什麼地方的?
2、 什麼情況下使用動態分配記憶體?
3、 動態申請記憶體一定要釋放,否則會記憶體洩露。你是否使用過記憶體檢測工具?
函式 知識點checklist
1、 如何檢視函式在記憶體中的位址?
2、 如何給乙個函式指標賦值?
3、 你是否會定義可變入參函式
4、 你是否可以區分函式的形參與實參?
5、 如何定義函式名,以準確的表達函式的用途?
6、 你是否使用const
來修飾函式入參和返回值,以表的特定的含義?
7、 遞迴如何使用?
變數 知識點checklist
1、 全域性變數,區域性變數,常量分別儲存在記憶體中的什麼地方?
2、 不同型別的變數,你是否知道其作用域?
3、 全域性變數和區域性變數是否可以重名?你是否在這樣做?
4、 區域性變數在函式退出後是否有效,為什麼?
5、 全域性變數為什麼不允許定義在標頭檔案中?有何危害?
鏈結(linux
)知識點checklist
1、 鏈結位於編譯過程的那個階段?
2、 動態鏈結庫和靜態鏈結庫使用時有何區別?
3、 如何對
動態鏈結庫
進行動態載入
(不用重啟程式而載入鏈結庫)?
4、 動態鏈結有何優點?
5、 動態鏈結庫中是否定義了非static
的全域性變數?你是否知道這是乙個非常危險的動作?
6、 動態庫中的全域性變數(非static
)和函式(非
static
)是否可以和上層全域性變數和函式重名?重名後會發生什麼事情?
執行時的資料結構
(linux
)知識點checklist
1、你知道什麼是段的概念嗎?
2、可執行程式可以分為幾個段?每個段儲存的是什麼內容?
3、如何檢視可執行程式各個段的大小?
4、當函式被呼叫時發生了什麼?
5、你有沒有試過程式的棧空間最大有多大?程式超過此大小會發生什麼?
6、你使用的系統的棧是向下生長的,還是向上生長的?
include
0.5w
知識點checklist
1、如何避免對同一標頭檔案的多次include?宣告
1w 知識點checklist
1、什麼是
宣告,什麼是定義?
2、你是否會運用c
語言宣告的優先順序規則?
關於複雜度:
1、軟體的首要技術使命
是管理複雜度。 2、
優秀程式設計師的
乙個特質
是將複雜的事情簡單化,而非將簡單的問題複雜化。所以,他們一般會選擇簡單的解決方案。 3、
極盡機巧,複雜的解決方案,除了將新手搞得暈頭轉向之外,別無他用。 4、
閱讀優秀程式設計師的**,是一種享受,你很少遇到思維的阻力,你可以盡情的享受簡單之美。
所以,對難以理解的語言特性,要慎用、少用,最好不用,而以簡單的解決方案替代之。
但是,在做這些之前,你必須對這些知識點理解深刻。
幾個問題的
1.寫乙個函式返回引數二進位制中 1 的個數 比如 15 0000 1111 4 個 1 程式原型 int count one bits unsigned int value 解 無符號整型為32位,所以利用迴圈32次,逐個判斷二進位制每一位是不是1 int count one bits unsig...
新增幾個問題
1 try 和 finally 都有 return,以哪個結果為準 2 zookeeper 使用的是什麼協議?使用的演算法介紹下 3 寫乙個記憶體的高併發 broker,實現基於 topic 的 push 和 pull message 4 將兩個順序的 int 佇列合併成乙個從小到大的佇列 5 介紹...
紀錄幾個問題
1.cvopenglestexturecachecreatetexturefromimage 為什麼該函式使用系統生成的cvimagebufferref 時速度很快,而本人使用由原始的rgb生成 cvimagebufferref,或者將系統原始的 cvimagebufferref bgra cvim...