1. 程式人生 > >c語言:typedef + struct + 指標

c語言:typedef + struct + 指標

c語言規範,定義結構體:

typedef  struct ANSWER_HEADER

{

u8 u8Type;

u8 u8Code;

u32 u32TimeStamp;

struct ANSWER_HEADER *pNext;

}ANSWER_HEADER_T, *PANSWER_HEADER_T;

 

ANSWER_HEADER為結構名,這個名字主要是為了在結構體中包含自己為成員變數的時候有用

ANSWER_HEADER_T為struct  ANSWER_HEADER的別名

PANSWER_HEADER_T為struct  ANSWER_HEADER*的別名

 

上面的定義方式等價於

 

struct ANSWER_HEADER

{

u8 u8Type;

u8 u8Code;

u32 u32TimeStamp;

struct ANSWER_HEADER *pNext;

};

typedef  struct ANSWER_HEADER ANSWER_HEADER_T;

typedef  struct ANSWER_HEADER *PANSWER_HEADER_T;

 

********************************************************************

結構的定義:

定義一個結構的一般形式為:
struct 結構名
    {成員表列};
成員列表的形式為:

 型別說明符  成員名;
 
例如 :
struct stu
{
 int num;
 char name[20];
 char sex;
 float score;
};

宣告結構變數的三種方法:


1.先定義結構型別,再宣告:
        struct stu 
        { 
         int num; 
         char name[20]; 
         char sex; 
         float score; 
        };
        struct stu boy1, boy2; 
        也可以用巨集定義使一個符號常量來表示
        一個結構型別。 
        例如: 
        #define STU struct stu 
        STU 
        { 
         int num; 
         char name[20]; 
         char sex; 
         float score; 
        }; 
        STU boy1, boy2;

2.  在定義結構型別的同時說明結構變數
        例如: 
        struct stu 
         { 
             int num; 
             char name[20]; 
             char sex; 
             float score; 
        }boy1, boy2; 
        這種形式的說明的一般形式為: 
        struct 結構名 
        { 
         成員表列 
        }變數名錶列;

 3.  直接說明結構變數。 
        例如: 
        struct 
        { 
         int num; 
         char name[20]; 
         char sex; 
         float score; 
        }boy1, boy2; 
        這種形式的說明的一般形式為:
        struct
        { 
             成員表列 
        }變數名錶列;

        結構指標變數說明的一般形式為: 
        struct 結構名 *結構指標變數名 
        例如:
        struct stu *pstu; 
        當然也可在定義 stu 結構時同時說明 pstu。
        例如:
        struct stu 
        { 
             int num; 
             char name[20]; 
             char sex; 
             float score; 
        }boy1, boy2, *pstu;

 

****************************************************************************************

 

下面是譚浩強老師c語言書中typedef一節:

型別定義符typedef 

C語言不僅提供了豐富的資料型別,而且還允許由使用者自己定義型別說明符,也就是說

允許由使用者為資料型別取“別名”。型別定義符 typedef 即可用來完成此功能。例如,有整

型量 a,b,其說明如下: 

    int a,b; 

其中 int 是整型變數的型別說明符。int 的完整寫法為 integer,為了增加程式的可讀性,

可把整型說明符用 typedef 定義為: 

typedef int INTEGER 

這以後就可用 INTEGER 來代替 int 作整型變數的型別說明了。  

例如: 

    INTEGER a,b; 

它等效於: 

    int a,b; 

用 typedef 定義陣列、指標、結構等型別將帶來很大的方便,不僅使程式書寫簡單而且

使意義更為明確,因而增強了可讀性。 

例如: 

    typedef char NAME[20];    表示 NAME 是字元陣列型別,陣列長度為 20。然後可

用 NAME 說明變數,如: 

    NAME a1,a2,s1,s2; 

完全等效於: 

    char a1[20],a2[20],s1[20],s2[20] 

又如: 

 

typedef struct stu 

    char name[20]; 

    int age; 

    char sex; 

} STU; 

定義 STU 表示 stu 的結構型別,然後可用 STU 來說明結構變數: 

STU body1,body2; 

typedef 定義的一般形式為: 

typedef 原型別名  新型別名  

其中原型別名中含有定義部分,新型別名一般用大寫表示,以便於區別。 

有時也可用巨集定義來代替 typedef 的功能,但是巨集定義是由預處理完成的,而 typedef

則是在編譯時完成的,後者更為靈活方便。