在上一章的學習過程中遇到了一個關鍵字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 復雜聲明"
