1 使用typedef定義結構體
typedef用來定義新的數據類型,通常typedef與結構體的定義配合使用。使用typedef的目的使結構體的表達更加簡練(所以說typedef語句並不是必須使用的)。
定義一個名字爲TreeNode的結構體類型(現在並沒有定義結構體變量,並不佔用內存空間):
struct TreeNode
{
int Element;
struct TreeNode* LeftChild;
struct TreeNode* RightChild;
};
爲結構體起一個別名Node,這時Node就等價於struct TreeNode
typedef struct TreeNode Node;
將結構體的定義和typedef語句可以連在一起寫:
typedef struct TreeNode
{
int Element;
struct TreeNode* LeftChild;
struct TreeNode* RightChild;
}Node;
注意不要與“定義結構體類型的同時定義結構體類型變量”混淆:
使用typedef關鍵字定義結構體類型 定義結構體類型的同時定義結構體類型變量
typedef struct student
{
int age;
int height;
}std;
//std相當於struct student
struct student
{
int age;
int height;
}std1,std2;
//定義了student數據類型的結構體和std1、std2結構體變量
2 使用typedef定義結構體指針
定義一個名爲TreeNode的結構體,和指向該結構體類型的指針PtrToTreeNode(不使用typedef):
struct TreeNode
{
int Element;
struct TreeNode* LeftChild;
struct TreeNode* RightChild;
};
struct TreeNode *PtrToTreeNode; //定義指針
使用typedef關鍵字用一個單詞Node代替struct TreeNode,並定義指向該結構體類型的指針PtrToTreeNode:
struct TreeNode
{
int Element;
struct TreeNode* LeftChild;
struct TreeNode* RightChild;
};
typedef struct TreeNode Node; //用Node代替struct TreeNode
Node *PtrToTreeNode; //定義指針
將結構體的定義和typedef連在一起寫,再次縮短代碼:
typedef struct TreeNode
{
int Element;
struct TreeNode* LeftChild;
struct TreeNode* RightChild;
}Node; //定義結構體並用Node代替struct TreeNode
Node *PtrToTreeNode; //定義指針
還可以繼續縮短代碼,直接定義了指向結構體類型的指針,但是這種寫法沒有爲結構體起一個別名。
typedef struct TreeNode
{
int Element;
struct TreeNode* LeftChild;
struct TreeNode* RightChild;
} *PtrToTreeNode; //直接定義指針
在定義結構體時,省略struct後面的結構體名也是可以的,但是由於沒有名字,操作(如定義結構體變量)只能在定義的同時進行
參考:
基本:https://blog.csdn.net/u013632190/article/details/47720703
####重要####:https://blog.csdn.net/u013814701/article/details/52996544
其他擴展:
typedef函數指針用法:https://blog.csdn.net/qll125596718/article/details/6891881
關於typedef的用法總結:https://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.html