Object C學習筆記21-typedef用法

賀臣發表於2014-04-03

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

    

相關文章