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語言
- C語言初學者必須掌握的關鍵字!C語言
- C 語言的標頭檔案是必須的嗎
- 《C Traps and Pitfalls》(C陷阱與缺陷)
- 做一個好前端必須要知道的事——JS語言前端JS
- C語言中你必須知道的幾大排序演算法C語言排序演算法
- C語言初學者最常問的幾個問題C語言
- C#.NET 中你必須知道的反射C#反射
- 每一個C#開發者必須知道的13件事情C#
- 主元素問題(C語言)C語言
- 《C缺陷與陷阱》讀書筆記筆記
- C陷阱與缺陷--讀書筆記筆記
- c陷阱與缺陷_知識點整理
- 關於C語言的面試問題C語言面試
- 12個有趣的C語言問答C語言
- 學習 Java 語言,你必須知道的 Java 簡史Java
- C語言的角落——這些C語言不常用的特性你知道嗎?C語言
- C語言解決排序問題C語言排序
- C語言緩衝區問題C語言
- c語言金字塔問題C語言
- C 語言常見問題(轉)
- C語言的謎題C語言
- 聊聊C語言/C++—程式和程式語言C語言C++
- C語言常見使用問題2C語言
- C語言指標常見問題C語言指標
- (C語言版)猴子吃桃問題C語言
- 手搓一個兔子問題(分享一個C語言問題,持續更新…)C語言
- IT人必須思考的14個問題
- C++和c語言的分別C++C語言
- C語言(C++語言)中##(兩個井號)和#(一個井號)用法[轉]C語言C++
- New的幾個問題 詳解 --讀你必須知道的.NET筆記筆記
- 邊緣計算你必須知道的100個術語
- 回溯和遞迴實現迷宮問題(C語言)遞迴C語言
- 最大連續子陣列和求解問題(C語言)陣列C語言