typedef學習筆記

2021-08-11 21:54:17 字數 2852 閱讀 2683

在語句中所起的作用把語句原先定義變數變成了定義型別

比對一下兩個宣告:

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...