C陷阱和缺陷,必須知道的495個C語言問題
C陷阱和缺陷
1,將常數0轉型為“指向返回值為void的函式的指標”型別:(void (*)())0
2,巨集定義不要忽視空格
必須知道的495個C語言問題
1,typedef int (*funcptr)();意思是定義了一個型別funcptr,表示指向返回值為int型(引數未指明)的函式的指標。它可以用來宣告一個或多個函式指標。
2,如何宣告返回指向同型別函式的指標的函式?即函式指標返回一個函式指標;設計一個狀態機,用函式表示每種狀態,每個函式都會返回一個指向下一個狀態的函式的指標。
不能直接完成這個任務:一種方法是讓函式返回一個一般的函式指標,然後在傳遞這個指標的時候進行適當的型別轉換
typedef int (*funcptr) ();//一般的函式指標
typedef funcptr (*ptrfuncptr) ();//指向函式返回的函式指標
funcptr start(),stop(); funcptr state1(),state2(),state3();
void statemachine()
{
ptrfuncptr state=start;
while(state!=stop)
{
state=(ptrfuncptr)(*state)();
}
}
funcptr start(){ return (funcptr) state1;}
第二個型別定義ptrfuncptr隱藏了一些十分隱晦的語法。如果沒有這個定義,變數必須宣告為(funcptr)(*state)(),而呼叫的時候就得用(funcptr(*)())(*state)()
3,函式呼叫只能出現在自動變數(即區域性非靜態變數)的初始式中。
4,右值既不能賦值,也不能自增。void *指標只能儲存物件(資料)指標,將函式指標轉換為void*是不可移植的。所有的函式指標型別都可以相互轉換,只要在呼叫前轉回
正確的型別即可,因此,可以使用任何函式型別(int (*) ())或void (*) () 即未指明引數,返回型別int或void的函式。
5,陣列是一個由同一型別的連續元素組成的預先分配的記憶體塊,指標是一個對任何位置的(特定型別的)資料元素的引用。陣列自動分配空間但不能重分配或改變大小。指標必須被賦值以指向分配空間
可以使用malloc但是可以隨意重新賦值指向不同物件。
6,陣列和下標可以互換。
7,動態的分配多維陣列:分配一個指標陣列,然後把每個指標初始化為動態分配的“行”;for迴圈
8,多數malloc/free的實現並不把釋放的記憶體返回作業系統,而是留著供同一程式的後續malloc使用。
9,在定義函式式的巨集的時候:巨集擴充套件必須使用括號,以便保護表示式中低優先順序的操作符;在巨集定義內部,所有引數的出現必須用括號括起來,以便保護實參中任何低優先順序的操作符不受巨集擴充套件的其他部分影響。
相關文章
- c語言-記錄閱讀《c缺陷與陷阱》C語言
- C語言必須掌握的判斷題 | 4C語言
- C語言必須掌握的判斷題 | 10C語言
- C語言必須要記住的經典程式C語言
- C語言初學者必須掌握的關鍵字!C語言
- C語言中你必須知道的幾大排序演算法C語言排序演算法
- 做一個好前端必須要知道的事——JS語言前端JS
- C#.NET 中你必須知道的反射C#反射
- C語言初學者最常問的幾個問題C語言
- 主元素問題(C語言)C語言
- 《C缺陷與陷阱》讀書筆記筆記
- C語言解決排序問題C語言排序
- C語言的角落——這些C語言不常用的特性你知道嗎?C語言
- Linux下C語言編譯的問題LinuxC語言編譯
- 學習 Java 語言,你必須知道的 Java 簡史Java
- 聊聊C語言/C++—程式和程式語言C語言C++
- C語言指標常見問題C語言指標
- C語言常見使用問題2C語言
- 手搓一個兔子問題(分享一個C語言問題,持續更新…)C語言
- C++和c語言的分別C++C語言
- c語言實現貓吃老鼠的問題C語言
- 最大連續子陣列和求解問題(C語言)陣列C語言
- 回溯和遞迴實現迷宮問題(C語言)遞迴C語言
- 邊緣計算你必須知道的100個術語
- 【C語言練習題】小球反彈問題C語言
- c 語言指標操作經典問題指標
- Python 和 C 語言學哪個更好?Python
- [C#.NET 拾遺補漏]04:你必須知道的反射C#反射
- New的幾個問題 詳解 --讀你必須知道的.NET筆記筆記
- 一名合格前端人員必須知道的 this 用法和陷阱(JS系列之三)前端JS
- C語言字串例題C語言字串
- 04.關於執行緒你必須知道的8個問題(下)執行緒
- 03.關於執行緒你必須知道的8個問題(中)執行緒
- C/C++語言精髓 *和&詳解C++
- C語言的考試題型C語言
- C語言:一個例子理解 union 和 structC語言Struct
- c的陷阱
- 面試挖坑題:之C語言底層操作問題面試C語言