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
則是在編譯時完成的,後者更為靈活方便。