Object C學習筆記21-typedef用法


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

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM