c++ - 初学数据结构遇到有一个疑问。
伊谢尔伦
伊谢尔伦 2017-04-17 14:44:57
0
4
373

教材中有

typedef struct node{
            
            ...
}node;

请问就功能而言和以下有区别吗?

typedef struct{
           ... /*相同内容*/
           
}node;
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回覆(4)
伊谢尔伦

簡單點來說,一般我們取不同的名字,例如

typedef struct node_t {
  // 具体内容
} Node;

定義變數時,如果用node_t需要這樣寫:

struct node_t node;

如果用Node的話,可以這麼簡化來寫:

Node node;

如果寫成省略掉node_t,就不能用第一種寫法了。

typedef struct {
  // 具体内容
} Node;

一般node_t都是用來定義鍊錶結構體的

typedef struct node_t {
  // 具体内容
  struct node_t *next;
} Node;

其實,這只是structtypedef結合的用法,可以分割為:

struct node_t {
  // 具体内容
};

typedef struct node_t Node;
黄舟

網路搜尋一下會有很多講解的,總有你需要的
這篇文章看著挺易懂的,你看下結構體定義typedef struct 用法詳解和用法小結
以下是文章的正文:

typedef是型別定義的意思。 typedef struct 是為了使用這個結構體方便。

具體區別在於:
若struct node{ }這樣來定義結構體的話。在定義 node 的結構體變數時,需要這樣寫:struct node n;
若用typedef,可以這樣寫:typedef struct node{}NODE; 。在申請變數時就可以這樣寫:NODE n;其實就相當於 NODE 是node 的別名。差別就在於使用時,是否可以省去struct這個關鍵字。

1 首先:
在C中定義一個結構體類型時如果要用typedef:
typedef struct Student
{
int no;
char name[12];
}Stu,student;
於是在宣告變數的時候就可:Stu stu1;或:student stu2;(Stu 和student 同時為Student的別名)
如果沒有typedef即:
struct Student
{
int no;
char name[12];
}Stu;
就必須用struct Student stu1;或struct Stu stu1;來宣告
另外這裡也可以不寫Student(於是也不能struct Student stu1;了)
typedef struct
{
int no;
char name[12];
}Stu;

2其次:
在c++中如果用typedef的話,又會造成區別:
struct Student
{
int no;
char name[12];
} stu1;//stu1是一個變數

typedef struct Student2
{
int no;
char name[12];
}stu2;//stu2是結構體類型,即stu2是Student2的別名
使用時可以直接存取stu1.no
但是stu2則必須先定義stu2 s2;
然後s2.no=10;

刘奇

有區別,在結構體中如果存在struct node類型的成員,那麼第二種會報錯

巴扎黑

你這問題我遇過:

typedef struct{
    int a;
    char b;
    float c;
} TypeA;

typedef struct Node {
    int data; 
    //这里默认的是int型,如需其他类型可直接修改。 
    struc tNode*next;
    //指向Node型变量的指针
} Node;

凡是結構型(假設名為a)內部有這樣的指標型(假設名為b),即b是用來存放和a類型相同的結構體變數位址的指標型(如圖1.2中,結點A的指標next,next所指的結點B與結點A是屬於同一結構型的),則在定義a的typedef struct語句之後都要加上a這個結構型的名字。與先前定義的結構型TypeA進行比較,會發現這裡的結構型Node在定義方法上的不同。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板