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后面的結構體名也是可以的,但是由於沒有名字,操作(如定義結構體變量)只能在定義的同時進行。
typedef struct File { ...... } FileInfo;
取FileInfo為struct file 的別名
typedef struct File { ..... }FileInfo, *FileP;
經過我的求證:
給struct file 取個別名為FileInfo
給struct file * 取個別名為FIleP;
如:FileP L;//頭指針;