1. 程式人生 > >C語言中的typedef

C語言中的typedef

中文 講解 tro table 現在 int 一個 cor 位置

typedef 的講解與應用實例

  •   前言:我們學過C語言的人都應該聽過,或者說學過,甚至說用過typedef,多多少少都對其有所了解。不過就算沒聽過也沒關系,我們一起來探討一下。
  •   闡述:typedef 是英文 Type Define 的縮寫,中文就是類型定義。在計算機編程語言中用來為復雜的聲明定義簡單的別名,它本身是一種存儲類的關鍵字,與autoexternmutablestaticregister等關鍵字不能出現在同一個表達式中。
  • typedef與define的差異:#define在預編譯中,只是做簡單的完全替換不會做錯誤檢查,不管三七二十一,只會完全替換,例如:#define PI 3.1415926535 你寫成3.L415926535,傻傻的編譯器還是會把它代入引用的位置。而typedef unsigned int u16
    ;

/*用法一:類型的重定義*/
typedef unsigned char u8;
typedef char * PCHAR;
......

這裏的第一句是給unsigned char類型重新起個別名,叫 u8 應用時看到u8 定義的變量,就相當於unsigned char 類型,兩者是完全等價的。同理第二句是給char *

起了個別名PCHAR ,即 PCHAR 類型代表著指向字符串類型的指針。

1 /*用法二:與結構體結合使用*/
2 typedef struct tagMyStruct
3 {
4     int iNum;
5  
6     long lLength;
7
8 }MyStruct;

這個代碼實際上相當於進行了兩個操作:

第一聲明了一個結構體名為 tagMyStruct

tagMyStruct稱為“tag”,即“標簽”,實際上是一個臨時名字,struct 關鍵字和 tagMyStruct一起,構成了這個結構類型,不論是否有typedef,這個結構都存在。

我們可以用struct tagMyStruct varName來定義變量,但要註意,使用tagMyStruct varName來定義變量是不對的,因為struct 和tagMyStruct合在一起才能表示一

個結構類型。
1 struct tagMyStruct
2 {
3 
4     int
 iNum; 5 6 long lLength; 7 8 };

第二給該結構體起了個別名叫 MyStruct

1 typedef struct tagMyStruct MyStruct;

因此,MyStruct實際上相當於struct tagMyStruct,我們可以使用MyStruct varName來定義變量。

當然,我們有時還會看到如下定義:

typedef struct student
{
    char name[N];
    int age;
    char * sex;
}std,*pt;

這時是不是感覺有點奇怪,究竟std是結構體的別名,還是*pt是結構體的別名呢?這就是我今天要講的重點。

上面的代碼相當於執行了三步操作:

第一步:定義結構體

 struct student
{
    char name[N];
    int age;
    char * sex;
}std;

第二步:給結構體重命名

typedef struct student std;

第三步:給結構體指針類型重命名

typedef student struct * pt;

這時,我們可以用pt來聲明結構體指針類型的變量了,不用再寫 struct student * kk; 直接寫 pt kk; 簡單明了。

下面給個簡單的實例:

 1 /*
 2 *                程序名稱:typedef 的簡單實例
 3 *
 4 *                                    Veis聲明。
 5 */
 6 #include <stdio.h>
 7 #include <string.h>
 8 #define N 20
 9 typedef struct student
10 {
11     char name[N];
12     int age;
13     char * sex;
14 }std,*pt;                /*這裏的 pt 相當於一個 struct student * 類型;而 std 則是給結構體student起的別名*/
15 void main()
16 {
17     /*變量聲明*/
18     pt p;                    /*語句    struct student * p;   與語句  pt p;  等價*/                
19     std st1;
20 
21     /*變量初始化*/
22     strcpy(st1.name,"alen");
23     st1.age = 15;
24     st1.sex = "male";
25     p = &st1;
26 
27     /*打印輸出*/
28     printf("\t\t\tStudent‘s  Informations\nname:%s\nage:%d\nsex:%s\n\n",p->name,p->age,p->sex);
29 }

PS:心動不如行動,看完自己嘗試去寫,只有去寫去思考,你才能更好的理解和掌握一種東西。

本文作者能力有限,若本文有什麽講錯的地方歡迎指出,共同進步。-----------------Veis

C語言中的typedef