亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言的陷阱之typedef

發布時間:2020-08-05 16:08:47 來源:網絡 閱讀:474 作者:寒風飄葉22 欄目:編程語言

typedef是一個關鍵字,可以重命名一些數據類型也可以重定義一些新的數據類型。我們從以下幾個角度去理解typedef。

1.typedef和普通數據類型類型

typedef int MYINT;int a = 10;
MYINT B = 20;123123

我們給int重命名成MYINT,這時候 int 和MYINT 是一樣的,都可以定義變量,并且在32位平臺都是32位的。

2.typedef和結構體(重點)

struct people 
{    int age;    char sex;
};1234512345

上面創建了一個新的數據類型 strcut people,注意,這個是數據類型,數據類型不占內存。

struct people p1,p2;11

這時候我們定義了兩個變量,p1和p2,他們的數據類型是struct people,以后我們每次定義變量都要寫struct people,是不是感覺很麻煩,使用typedef給它重命名一下就簡單多了。

typedef struct people
{    int age;    char sex;
}STRPEO; 1234512345

這樣struct people和STRPEO和struct people就有了一樣的作用。以后我們在定義變量直接STRPEO p1,p2;是不是簡單很多。 
我們再來定義一個該結構體的指針

typedef struct people 

int age; 
char sex; 
}*PSTRPEO;

雖然* 和PSTRPEO很近,但是* 是和struct people 結合的,也就是說,PSTRPEO 的類型是struct people *

STRPEO P1;          //定義結構體變量P1.age = 20;        //給結構體age成員賦值PSTRPEO P = &p1;    //使用結構體指針訪問age成員printf("%d\n",p->age);      //結果是  20  12341234

3.typedef和#define(重點) 
typedef是給類型重命名,相當于一個數據類型,而#define是宏定義,在程序預處理時期直接替換

typedef int * PMYINT;

MYINT a,b;      123123

相當于 int* a,int* b,兩個變量的數據類型都是int *

#define PMYINT int *PMYINT a,b;123123

* 宏定義是直接替換,在這就是用 int替換掉PMYINT 相當于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

按照我們平常的理解應該是const int* p1;和int *const p2;p1指向的變量是不可變的,p2指針本身是不可變的。經過代碼驗證我們發現,無論是const PINT p1;還是PINT const p2; 效果都等價于 int *const ,p1和p2本身是不可變的。 那我們想讓指針指向的變量不可變怎么辦?

typedef const int* CPINT;

CPINT P1,CPINT P2;      //這樣p1和p2本身可變,指向的變量不可變。123123

5.typedef和函數指針

函數:int * test(const char *,int ); 
函數指針 int* ( * ptest)(const char * ,int )

我們每次定義這類函數的指針都要寫這么長,很麻煩于是

typedef int * ( * PTEST)(const char * ,int);

以后我們在使用該函數指針時直接PTEST P1,P2;就可以了。

6.使用typedef的意義 
使用typedef的好處就是簡化類型的書寫,創建與平臺無關的數據類型,有利于代碼移植,int在32位機器上就是32位的,在我們在32位機器上寫的程序很可能無法在64位平臺運行,我們可以把int用typedef重定義一下,即可增強代碼的可移植性。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广昌县| 通化市| 奉新县| 清原| 涞源县| 孟村| 绿春县| 青神县| 罗甸县| 淄博市| 嘉义市| 微山县| 华坪县| 九台市| 永州市| 香格里拉县| 密山市| 含山县| 开封县| 巫山县| 美姑县| 长白| 称多县| 温宿县| 双城市| 邹平县| 那曲县| 长沙市| 铅山县| 常熟市| 侯马市| 互助| 泸西县| 百色市| 湖南省| 万源市| 禹城市| 广宗县| 永胜县| 明水县| 淮滨县|