【C/C++筆記-3】typedef關鍵字與結構體、結構體指針

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章