typedef用法

介紹

typedef在c語言中主要是用來聲明數據類型的別名的,比如我們可以用來代替系統默認的類型名稱,數組、字符串、指針類型、字典等各種各樣的類型。當我們聲明了我們想要的別名后就可以使用我們聲明的別名來定義變量的類型。

四種常用的方式

一:基本數據類型

? ? //無符號整型

?? typedef unsigned int WMINT;

???WMINT i =0;

? ? //……

二:定義結構體

A、普通未聲明的寫法

struct point{

???int x;

???int y;

???int z;

};

struct pointp = {1,2,3};

B、聲明后的寫法

typedef struct point2 { ? ? ? ? ? ?

???int a;

???int b;

???int c;

} P;

P s = {2,2,2};

或者

struct point2 { ? ? ? ? ? ?

???int a;

???int b;

???int c;

};

typedef point2?P2;

P2 s2 ={2,2,2};

Oc枚舉

typedef NS_ENUM(NSInteger, WMNetWorkType) {

? ? Unknown????????? = -1,

? ? NotReachable ??? =0,

? ? ReachableViaWWAN =1,

? ? ReachableViaWiFi =2,

};

WMNetWorkType network =Unknown;

三:字符串數組

? //字符串 ?oc

?? ?typedef NSString WMNSString;

?? ?WMNSString* string = [WMNSString stringWithFormat:@"”];

//數組 ?c

typedef int WMNewINT100 [100];

WMNewINT100 arr;

四:指針類型

typedef char*? WMChar;

WMChar charr =0;



注意事項:

一:

下面代碼有什么問題

typedef?char*?P;

int?strcmp(const?P,const?P);

在上面的代碼中,“const?P”?是否相當于?“const?char*”?呢?

答案是否定的,原因很簡單,typedef?是用來定義一種類型的新別名的,它不同于宏,不是簡單的字符串替換。因此,“const?P”中的?const?給予了整個指針本身常量性,也就是形成了常量指針“char*const(一個指向char的常量指針)”。即它實際上相當于“char*const”,而不是“const?char*(指向常量?char?的指針)”。當然,要想讓?const?P 相當于?const?char*?也很容易,如下面的代碼所示:

typedef?const?char*?P;

int?strcmp(P,?P);

其實,無論什么時候,只要為指針聲明?typedef,那么就應該在最終的?typedef?名稱中加一個?const,以使得該指針本身是常量。

二、

還需要特別注意的是,雖然?typedef?并不真正影響對象的存儲特性,但在語法上它還是一個存儲類的關鍵字,就像?auto、extern、static?和?register?等關鍵字一樣。因此,像下面這種聲明方式是不可行的:

typedef?static?int?INT_STATIC;

不可行的原因是不能聲明多個存儲類關鍵字,由于?typedef?已經占據了存儲類關鍵字的位置,因此,在?typedef?聲明中就不能夠再使用?static?或任何其他存儲類關鍵字了。當然,編譯器也會報錯,如在?VC++2010?中的報錯信息為“無法指定多個存儲類”。


參考文章:http://c.biancheng.net/view/298.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容