C語言中的typedef

來源:互聯網
上載者:User

標籤:ora   ati   div   ring   char   使用   stat   void   操作   

typedef 的講解與應用執行個體

  •   前言:我們學過C語言的人都應該聽過,或者說學過,甚至說用過typedef,多多少少都對其有所瞭解。不過就算沒聽過也沒關係,我們一起來探討一下。
  •   闡述:typedef 是英文 Type Define 的縮寫,中文就是類型定義。在電腦程式設計語言中用來為複雜的聲明定義簡單的別名,它本身是一種儲存類的關鍵字,與auto、extern、mutable、static、register等關鍵字不能出現在同一個運算式中。
  •   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 tagMyStruct3 {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 tagMyStruct2 {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 student10 {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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.