在語句中所起的作用把語句原先定義變數變成了定義型別。
比對一下兩個宣告:
int *p;
typedef
int *p;
int *p 中, p是乙個變數,其型別為pointer to int;
在int *p前面增加乙個typedef後,p變為乙個typedef-name,這個typedef-name所表示的型別就是int *p宣告式中p的型別(int*)。說句白話,typedef讓p去除了普通變數的身份,搖身一變,變成了p的型別的乙個typedef-name了。
簡單的開始
型別定義的語法可以歸結為一句話:只要在變數定義前面加上typedef,就成了型別定義。這兒的原本應該是變數的東西,就成為了型別。
int integer; //整型變數
int *pointer; //整型指標變數
int array [5]; //整型陣列變數
int *p_array [5]; //整型指標的陣列的變數(中括號的優先順序比較高,所以是陣列,陣列中元素是 int *)
int (*array_pointer) [5]; //整型陣列的指標的變數(首先是指標,指向有5個int型元素的位址)
intfunction (int param); //函式定義,也可將函式名看作函式的變數
int *function (int param); //仍然是函式,但返回值是整型指標
int (*function) (int param); //現在就是指向函式的指標了
若要定義相應型別,即為型別來起名字,就是下面的形式:
typedef
int integer_t; //整型型別
typedef
int *pointer_t; //整型指標型別
typedef
int array_t [5]; //整型陣列型別
typedef
int *p_array_t [5]; //整型指標的陣列的型別
typedef
int (*array_pointer_t) [5]; //整型陣列的指標的型別
typedef
int function_t (int param); //函式型別
typedef
int *function_t (int param); //函式型別
typedef
int (*function_t) (int param); //指向函式的指標的型別
複雜一點
1.定義乙個有10個指標的陣列,該指標指向乙個函式,該函式有乙個整形引數,並返回乙個整型
第一種方法:int (*a[10])(int);
第二種方法:typedef
int (*pfunc)(int);
pfunc a[10];
2.定義乙個有10個指標的陣列,該指標指向乙個函式,該函式有乙個函式指標(不帶引數,返回值為空)引數,並返回空。
第一種方法:void (*a[10])(void (*)(void));
第二種方法:typedef
void (*pfuncparam)(void);
typedef
void (*pfunc)(pfuncparam);
pfunc a[10];
3.乙個指向有10個函式指標(不帶引數,返回值為double)陣列的指標
第一種方法:double (*)(void) (*p)[10];
第二種方法:typedef
double (*pfunc)(void);
typedef pfunc (*pfuncparam)[10];
pfuncparam p;
4.void (*b[10]) (void (*)());
b是乙個含有10個元素的陣列,陣列的元素是函式指標,該函式指標所指向的函式的返回值是void,函式的形參是另乙個函式指標,這個函式指標沒有形參,返回值為void
5.int (*func)(int *p);
首先找到變數名func,外面有一對圓括號,而且左邊是乙個*號,這說明func是乙個指標;然後跳出這個圓括號,先看右邊,又遇到圓括號,這說明(*func)是乙個函式,
所以func是乙個指向這類函式的指標,即函式指標,這類函式具有int*型別的形參,返回值型別是int。
6.int (*func[5])(int *);
func右邊是乙個運算子,說明func是具有5個元素的陣列;func的左邊有乙個*,說明func的元素是指標(注意這裡的*不是修飾func,而是修飾func[5]的。原因是運算子優先順序比*高,func先跟結合)。跳出這個括號,看右邊,又遇到圓括號,說明func陣列的元素是函式型別的指標,它指向的函式具有int*型別的形參,返回值型別為int。
7.double(*)() (*pa)[9]
pa是乙個指標,指向乙個含有9個元素的陣列,陣列的元素是乙個函式指標,函式指標所指向的函式沒有形參,返回值是double型。
從變數名看起,先往右,再往左,碰到乙個圓括號就調轉閱讀的方向;括號內分析完就跳出括號,還是按先右後左的順序,如此迴圈,直到整個宣告分析完。
解讀時,兩個規律
1.當前層被下一層修飾;
2.先找到型別名,符號優先順序確定下一層的方向
以上。
iOS學習筆記之typedef
typedef unsigned long long weiboid typedef 定義乙個使用方便的型別,謂之為 巨集定義 unsigned long long 是一種無符號的長長整型。本應該是這樣,unsigned long long int 這裡省略了int 編譯器會自動認可。unsigne...
Object C學習筆記21 typedef用法
在上一章的學習過程中遇到了乙個關鍵字typedef,這個關鍵字是c語言中的關鍵字,因為object c是c的擴充套件同樣也是支援typedef的。一.基本作用 typedef是c中的關鍵字,它的主要作用是給乙個資料型別定義乙個新的名稱,這些型別報告內部資料型別,比如int,char 還有自定義型別s...
typedef 學習總結
typedef的作用 1 為現有型別取乙個別名,實現 的跨平台使用 2 簡化 例項 a typedef double d d d 23.4 b typedef int a 5 a str abcd c 結構體 typedef structstudent student stu 或者 struct p...