2014-11-23 220 views
-1

我想了解一段代碼中的struct用法。這讓我非常困惑。看起來像typedef在同一個結構體上使用兩次。請任何人都可以幫我理解爲什麼這段代碼有兩次typedef。有什麼辦法可以簡化這段代碼。 非常感謝您的時間。typedef在相同的結構上使用兩次

typedef struct { 
city_t* cities; 
int count;  
cost_t cost;  
} tour_struct; 
typedef tour_struct* tour_t; 


typedef struct { 
tour_t* list; 
int list_sz; 
int list_alloc; 
} stack_struct; 
typedef stack_struct* my_stack_t; 
+0

'tour_struct'是一個結構。 'tour_t'是一個'tour_struct *',也就是'tour_t'是一個指向結構類型的指針,定義爲tour_struct – nhgrif 2014-11-23 16:19:34

回答

2

第一個typedef給出了(匿名)結構的一個類型名。第二個typedef定義了另一個指針的類型。

tour_struct tour; // declares a struct. 
tour_t ptr; // declares a pointer to a struct. 
0

第一類型定義是在一個典型的方式使用在C 申報結構我想你指的是第二類型定義: 的typedef tour_struct * tour_t; 它被使用,因爲這裏被聲明爲另一個名稱(別名)指針上面聲明的結構。這就是爲什麼使用第二個typedef的原因。

+0

我可以改變我的代碼並且仍然有相同的含義。 struct tour_struct { city_t * cities; int count; cost_t cost; }; struct stack_struct {0} struct tour_struct * list; int list_sz; int list_alloc; }; struct stack_struct * my_stack_t; – user3551094 2014-11-23 16:27:40

0

在typedef中的已知類型之後使用'*'只是定義了一個指向該類型的指針。

typedef stack_struct* my_stack_t; 

將定義一個指針stack_struct和將它稱爲my_stack_t