每日收穫之enum typedef

2021-08-04 11:11:51 字數 1595 閱讀 5574

由於c功底弱,在學習的過程中被許多識別符號擋住,就變成了發散式學習。所以這篇blog中的兩個內容正是學習bool時遇到的問題。

enum定義了一種列舉型別,其形式為:

enum 列舉名 列舉變數;

舉例說明:

#include using std::cout;

using std::endl;

int main()x;

cout《可以對x賦列舉型別內部的值,也可以賦其他值,但是x被定義為string型別,因此要進行型別轉換:

x = (string) 5;//正確

x = 5;//錯誤

typedef enum bool;

這裡可以看到將bool定義為enum變數,可以取0和1兩個值,符合boolean型別的設定~

因此又引申出了typedef的用法。

【理解複雜宣告可用的「右左法則」:

從變數名看起,先往右,再往左,碰到乙個圓括號就調轉閱讀的方向;括號內分析完就跳出括號,還是按先右後左的順序,如此迴圈,直到整個宣告分析完。舉例:

int (*func)(int *p);

首先找到變數名func,外面有一對圓括號,而且左邊是乙個*號,這說明func是乙個指標;然後跳出這個圓括號,先看右邊,又遇到圓括號,這說明(*func)是乙個函式,所以     func是乙個指向這類函式的指標,即函式指標,這類函式具有int*型別的形參,返回值型別是int。

int (*func[5])(int *);

func右邊是乙個運算子,說明func是具有5個元素的陣列;func的左邊有乙個*,說明func的元素是指標(注意這裡的*不是修飾func,而是修飾func[5]的,原因是運算子優先 級比*高,func先跟結合)。跳出這個括號,看右邊,又遇到圓括號,說明func陣列的元素是函式型別的指標,它指向的函式具有int*型別的形參,返回值型別為int。

也可以記住2個模式:

type (*)(....) 函式指標

type (*)[  ] 陣列指標】

收穫最深的是,使用 typedef 定義的乙個指標變數型別,與系統固有型別的差異:

typedef char * pstr;

char string[4] = "abc";

const char *p1 = string;

const pstr p2 = string;

p1++;

p2++;

其中,最後一句會報錯。原因在於:

const char *p1 = string;
這句** const 與指標復合使用,因此屬於底層const(參考c++primer書中p57),因此指標p1所指的物件是乙個常量,但是指標本身可以改變。

const pstr p2 = string;
但是這句中,pstr 是自定義的型別,不能直接等同於char *,因此這句依舊是頂層const,表示指標本身是乙個常量。因此進行加法運算會報錯。

每日收穫2

w handler 非同步處理沒有效果 原因handler.post 這個方法並未真正新建執行緒,只是在原執行緒上執行。解決方案 handler.postdelayed thread,3000 可以建立新執行緒。i 測試方法標籤化 why 在複雜而且大量的測試工作中需要嚴謹而邏輯性強的測試手段。wh...

記錄每日收穫。2 27

今日主要工作 include include include include include include using namespace std using namespace cv vectorsplit const string str,const string pattern return...

2016 11 17 今日收穫

1.i o流常用控制符 使用控制符時,在程式開頭加投檔案 include c 有兩種方法控制格式輸出 1 用格式控制符 2 用流物件的成員函式 格式控制符 dec 設定基數為10 hex 設定基數為16 oct 設定基數為8 setfill c 設定填充字元c setprecision n 設定顯示...