Posted on 2010-11-29 13:59
幻海藍夢 閱讀(1269)
評論(0) 編輯 收藏 所屬分類:
C語言學習
在現實生活中,信息的概念可能是長度,數量和面積等。在C語言中,信息被抽象為int、float和double等基本數據類型。從基本數據類型名稱上,
不能夠看出其所代表的物理屬性,并且int、float和double為系統關鍵字,不可以修改。為了解決用戶自定義數據類型名稱的需求,C語言中引入類
型重定義語句typedef,可以為數據類型定義新的類型名稱,從而豐富數據類型所包含的屬性信息。
typedef的語法描述
typedef
類型名稱 類型標識符;
typedef為系統保留字,“類型名稱”為已知數據類型名稱,包括基本數據類型和用戶自定義數據類型,“類型標識符”
為新的類型名稱。例如:
typedef double LENGTH;
typedef unsigned int COUNT;
定
義新的類型名稱之后,可像基本數據類型那樣定義變量。例如:
typedef unsigned int COUNT;
unsigned
int b;
COUNT c;
typedef 的主要應用有如下的幾種形式:
1) 為基本數據類型定義新的類型名。例如:
typedef
unsigned int COUNT;
typedef double AREA;
此種應用的主要目的,首先是豐富數據類型中包含的屬
性信息,其次是為了系統移植的需要,稍后詳細描述。
2) 為自定義數據類型(結構體、公用體和枚舉類型)定義簡潔的類型名稱。例如:
struct
Point
{
double x;
double y;
double z;
};
struct Point
oPoint1={100,100,0};
struct Point oPoint2;
其中結構體struct
Point為新的數據類型,在定義變量的時候均要有保留字struct,而不能像int和double那樣直接使用Point來定義變量。如果經過如下的
修改,
typedef struct tagPoint
{
double x;
double y;
double
z;
} Point;
定義變量的方法可以簡化為
Point oPoint;
由于定義結構體類型有多種形式,因此可以修改
如下:
typedef struct
{
double x;
double y;
double z;
}
Point;
3) 為數組定義簡潔的類型名稱。例如,定義三個長度為5的整型數組,
int
a[10],b[10],c[10],d[10];
在C語言中,可以將長度為10的整型數組看作為一個新的數據類型,再利用typedef為其重
定義一個新的名稱,可以更加簡潔形式定義此種類型的變量,具體的處理方式如下:
typedef int INT_ARRAY_10[10];
typedef
int INT_ARRAY_20[20];
INT_ARRAY_10 a,b,c,d;
INT_ARRAY_20 e;
其中
INT_ARRAY_10和INT_ARRAY_20為新的類型名,10 和20
為數組的長度。a,b,c,d均是長度為10的整型數組,e是長度為20的整型數組。
4)
為指針定義簡潔的名稱。首先為數據指針定義新的名稱,例如
typedef char * STRING;
STRING
csName={“Jhon”};
其次,可以為函數指針定義新的名稱,例如
typedef int (*MyFUN)(int
a,int b);
其中MyFUN代表 int *XFunction(int a,intb)類型指針的新名稱。例如
typedef
int (*MyFUN)(int a,int b);
int Max(int a,int b);
MyFUN *pMyFun;
pMyFun=
Max;
在使用typedef時,應當注意如下的問題:
1)
typedef的目的是為已知數據類型增加一個新的名稱。因此并沒有引入新的數據類型。
2) typedef
只適于類型名稱定義,不適合變量的定義。
3) typedef 與#define具有相似的之處,但是實質不同。
提示 #define AREA double 與 typedef double AREA
可以達到相同的效果。但是其實質不同,
#define為預編譯處理命令,主要定義常量,此常量可以為任何的字符及其組合,在編譯之前,將此常量出現的所有位置,用其代表的字符或字符組合無條件
的替換,然后進行編譯。typedef是為已知數據類型增加一個新名稱,其原理與使用int double等保留字一致。
原文: http://blog.chinaunix.net/u2/75045/showart_1120891.html