typedef struct 指針結構體使用方法


A>>>>>>>>>>>>>>>>>>>>>>>>

typedef struct
                {
                    ...
                    ...
                }POINT,*POINT_P;

     POINT為結構名,這個名字主要是為了在結構體中包含自己為成員變量的時候有用
                POINT_T為struct  POINT的別名
                POINT_P為struct  POINT*的別名

                POINT為結構體名,可聲明對象;
                POINT_P為struct  POINT*的別名,等同於typedef POINT * POINT_P;

* 結構體指針如何使用(二層指針)

        #include <iostream>
        using namespace std;
        typedef struct {
        int x;
        int y;
        }point,*_point; //定義類,給類一個別名
        //驗證 typedef point * _point;
        int main()
        {
            _point *hp;
            point pt1;
            pt1.x = 2;
            pt1.y = 5;
            _point p;
            p = &pt1;
            hp = &p;

            cout<<  pt1.x<<" "<<pt1.y <<endl;
            cout<< (**hp).x <<" "<< (**hp).y <<endl;
            return 0;
        }
        
        //運行結果:2 5
                       2 5

 

B>>>>>>>>>>>>>>>>>>>>>>>>

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結構體變量

二、使用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 TreeNodeNode *PtrToTreeNode;//定義指針

將結構體的定義typedef連在一起寫,再次縮短代碼:

typedef struct TreeNode{ int Element; struct TreeNode* LeftChild; struct TreeNode* RightChild;}Node; //定義結構體並用Node代替struct TreeNodeNode *PtrToTreeNode; //定義指針

還可以繼續縮短代碼,直接定義了指向結構體類型的指針,但是這種寫法沒有為結構體起一個別名。

typedef struct TreeNode{ int Element; struct TreeNode* LeftChild; struct TreeNode* RightChild;} *PtrToTreeNode; //直接定義指針 在定義結構體時,省略struct后面的結構體名也是可以的,但是由於沒有名字,操作(如定義結構體變量)只能在定義的同時進行。
C>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
typedef struct File
{
   ......          
} FileInfo;

取FileInfo為struct file 的別名

typedef struct File
{
.....
}FileInfo, *FileP;

經過我的求證:

給struct file 取個別名為FileInfo

給struct file * 取個別名為FIleP;

如:FileP L;//頭指針;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM