c語言知識點checklist解答

字符串  

學習時間: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
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語言聲明的優先級規則?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章