在上一章的學習過程中遇到了一個關鍵字typedef,這個關鍵字是C語言中的關鍵字,因為Object C是C的擴充套件同樣也是支援typedef的。
一. 基本作用
typedef是C中的關鍵字,它的主要作用是給一個資料型別定義一個新的名稱,這些型別報告內部資料型別,比如int,char 還有自定義型別struct,enum等。
typedef一般有兩個作用:(1) 給某種型別頂一個定義比較容易記的名字,相當於別名;(2)簡化較為複雜的型別宣告。
二. typedef的使用
1. 定義新型別
語法:typedef 型別 新型別
#import <Foundation/Foundation.h> typedef int newint; typedef newint firstint; int main(int argc, const char * argv[]) { @autoreleasepool { newint a=5; NSLog(@"%d",a); firstint b=19; NSLog(@"%d",b); } return 0; }
typedef int newint 將型別int重新定義為newint型別,在後面的程式碼中我們可以看出使用 newint a=5; 這裡出現了新的型別newint,而這個等價於
int a=5。 繼續看 typedef newint firstint 這裡使用的newint定義一個新型別firstint。 在後面的程式碼中宣告變數firstint b=19 同樣通過,這個等價於
newint b=19 等價於 int b=19 ,從上面可以看出他們之間是可以傳遞的。
2. 函式指標
在使用到函式指標的時候,因為很多C方面的語法有欠缺,很多都是重新去查詢資料溫習,可能在某些地方還有錯誤。
語法: typedef 返回值型別 (*新型別) (引數列表)
int newfunc(int num){ return num+100; } int main(int argc, const char * argv[]) { @autoreleasepool { typedef int (*myfun)(int); myfun fun=newfunc; int value=(*fun)(100); NSLog(@"%d",value); } return 0; }
上面的程式碼中定義了一個新的函式newfunc 其中返回值型別為int,有一個輸入引數也是int。
在main方法中使用typedef 給函式newfunc定義了一個新的指標型別myfun。 然後這個型別指向了newfunc函式。
3. typedef 結構體和列舉
關於結構體和列舉可以參考文章: Object C學習筆記19-列舉 Object C學習筆記20-結構體
對比下面兩段程式碼,看看使用typedef的struct和不使用typedef的struct的不同之處
不使用typedef的struct
struct Student{ int age; }; struct Student stu ; stu.age=34; NSLog(@"%d",stu.age);
首先定義了一個Student 的struct 型別,如果要什麼一個Student 的變數,必須使用struct Student stu,stu2 格式;
typedef struct Student{ int age; } stu; stu a,b; a.age=45; b.age=32; NSLog(@"%d",a.age);
上面程式碼的作用就相當於給結構型別struct Student 指定了一個新名稱 stu,所以在後面的使用的時候就不需要使用struct Student 可以直接使用stu即可。而使用enum 型別也是同樣如此。
三. 複雜宣告
先看看這個是什麼東西 int (*(*func[7][8][9])(int*))[5]; 能看懂不,看不懂,理解需要點水平,到目前為止我也只是半懂的狀態,這裡不能班門弄斧的講解複雜的宣告。這裡可以建議看一篇文章 "C 複雜宣告"