typedef是一個關(guān)鍵字,可以重命名一些數(shù)據(jù)類型也可以重定義一些新的數(shù)據(jù)類型。我們從以下幾個角度去理解typedef。
1.typedef和普通數(shù)據(jù)類型類型
typedef int MYINT;int a = 10; MYINT B = 20;123123
我們給int重命名成MYINT,這時候 int 和MYINT 是一樣的,都可以定義變量,并且在32位平臺都是32位的。
2.typedef和結(jié)構(gòu)體(重點)
struct people { int age; char sex; };1234512345
上面創(chuàng)建了一個新的數(shù)據(jù)類型 strcut people,注意,這個是數(shù)據(jù)類型,數(shù)據(jù)類型不占內(nèi)存。
struct people p1,p2;11
這時候我們定義了兩個變量,p1和p2,他們的數(shù)據(jù)類型是struct people,以后我們每次定義變量都要寫struct people,是不是感覺很麻煩,使用typedef給它重命名一下就簡單多了。
typedef struct people { int age; char sex; }STRPEO; 1234512345
這樣struct people和STRPEO和struct people就有了一樣的作用。以后我們在定義變量直接STRPEO p1,p2;是不是簡單很多。
我們再來定義一個該結(jié)構(gòu)體的指針
typedef struct people
{
int age;
char sex;
}*PSTRPEO;
雖然* 和PSTRPEO很近,但是* 是和struct people 結(jié)合的,也就是說,PSTRPEO 的類型是struct people *
STRPEO P1; //定義結(jié)構(gòu)體變量P1.age = 20; //給結(jié)構(gòu)體age成員賦值PSTRPEO P = &p1; //使用結(jié)構(gòu)體指針訪問age成員printf("%d\n",p->age); //結(jié)果是 20 12341234
3.typedef和#define(重點)
typedef是給類型重命名,相當(dāng)于一個數(shù)據(jù)類型,而#define是宏定義,在程序預(yù)處理時期直接替換
typedef int * PMYINT; MYINT a,b; 123123
相當(dāng)于 int* a,int* b,兩個變量的數(shù)據(jù)類型都是int *
#define PMYINT int *PMYINT a,b;123123
* 宏定義是直接替換,在這就是用 int替換掉PMYINT 相當(dāng)于int a,b;a是int類型,b是int類型。**
4.typedef和const(重點)
回顧:const int * p; //指針p指向的變量是不可變得
int * const p; //指針p本身是不可改變的
typedef int* PINT;const PINT p1; PINT const p2;12341234
按照我們平常的理解應(yīng)該是const int* p1;和int *const p2;p1指向的變量是不可變的,p2指針本身是不可變的。經(jīng)過代碼驗證我們發(fā)現(xiàn),無論是const PINT p1;還是PINT const p2; 效果都等價于 int *const ,p1和p2本身是不可變的。 那我們想讓指針指向的變量不可變怎么辦?
typedef const int* CPINT; CPINT P1,CPINT P2; //這樣p1和p2本身可變,指向的變量不可變。123123
5.typedef和函數(shù)指針
函數(shù):int * test(const char *,int );
函數(shù)指針 int* ( * ptest)(const char * ,int )
我們每次定義這類函數(shù)的指針都要寫這么長,很麻煩于是
typedef int * ( * PTEST)(const char * ,int);
以后我們在使用該函數(shù)指針時直接PTEST P1,P2;就可以了。
6.使用typedef的意義
使用typedef的好處就是簡化類型的書寫,創(chuàng)建與平臺無關(guān)的數(shù)據(jù)類型,有利于代碼移植,int在32位機器上就是32位的,在我們在32位機器上寫的程序很可能無法在64位平臺運行,我們可以把int用typedef重定義一下,即可增強代碼的可移植性。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
文章標(biāo)題:C語言的陷阱之typedef-創(chuàng)新互聯(lián)
瀏覽路徑:http://chinadenli.net/article0/ehgio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、全網(wǎng)營銷推廣、微信公眾號、營銷型網(wǎng)站建設(shè)、域名注冊、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容