jasmine214--love

          只有當你的內心總是充滿快樂、美好的愿望和寧靜時,你才能擁有強壯的體魄和明朗、快樂或者寧靜的面容。
          posts - 731, comments - 60, trackbacks - 0, articles - 0

          typedef 類型重命名 與#define 宏定義

          Posted on 2010-11-29 13:59 幻海藍夢 閱讀(1277) 評論(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
          主站蜘蛛池模板: 余干县| 隆回县| 离岛区| 同仁县| 墨脱县| 盖州市| 英山县| 富裕县| 辉县市| 嫩江县| 青阳县| 高安市| 谷城县| 宝坻区| 尉氏县| 龙州县| 伊宁县| 乡宁县| 镇平县| 鱼台县| 瑞金市| 桦甸市| 珲春市| 兴海县| 恩平市| 慈溪市| 海兴县| 武穴市| 鲜城| 祥云县| 宝清县| 大兴区| 桐城市| 清涧县| 抚顺县| 涟水县| 无棣县| 巴中市| 天镇县| 承德市| 甘德县|