2014-09-02 107 views
2
typedef struct nodetype node; 
typedef node *link; 

struct nodetype 
{ 
int dat; 
link ptr; 
}; 


typedef link *stack; 

在上面的代碼中,我對所定義的內容有些困惑。 我明白typedef是做什麼的,但我仍然想知道typedef node *link;究竟是由什麼定義的?它是否定義了一個指向節點的指針?我也有同樣的問題typedef link *stack;正由typedef聲明什麼?

+1

「它創建了一個指向節點的指針,還是創建了一個指向節點的結構指針」 - 這個「結構指針」概念是什麼,它與常規指針有什麼不同?通常,當人們說「結構指針」時,它們只是指向指向類型是結構類型的指針,所以「指向結點的指針」和「指向結點的結構指針」之間的唯一區別是有點術語冗餘。 – user2357112 2014-09-02 02:14:55

+1

這聽起來像你不太瞭解'typedef'。這爲現有類型提供了一個新名稱,語法與聲明變量相同;除了在關鍵字「typedef」中添加意味着該標識符是該類型的別名,而不是該類型的變量。 – 2014-09-02 02:16:19

+0

我問這個問題不對。我想我應該花更多的時間考慮要問什麼,那是我的錯。不過我明白現在正在發生的事情。謝謝 – PattyB 2014-09-02 02:33:12

回答

2

typedef行不創建任何東西。 typedef用於爲類型提供新的名稱,它們不是變量的聲明或定義,所以此刻沒有任何東西可以創建。

typedef node *link; 

裝置link是該類型node *另一個名稱。只有當你使用它像:

link link_varialbe; 

創建link型(同node *)的變量。

+0

如果您將定義視爲創建,他們正在創建新類型。 – ThoAppelsin 2014-09-02 02:19:32

+3

@ThoAppelsin不,他們不是。 'node *'和'link'是完全相同的類型。 – 2014-09-02 02:20:51

+3

@ThoAppelsin:不,'typedef'僅爲現有類型創建一個新名稱。 – 2014-09-02 02:28:54

0

typedef定義給定類型的別名。
其優點是給你的代碼元素提供一些特殊的含義。

1

nodestruct nodetype類型的別名; linknode *類型的別名,意思是它也是struct nodetype *類型的別名。

stacklink *類型,這是相同的node **類型,這是相同的struct nodetype **類型的對象

這是一個可怕如何使用typedefs的例子,正是因爲它引起你的困惑。它爲同樣的東西創建了一堆不同的名字,沒有很好的理由,它隱藏了一個指向某個typedef名稱的指針,這幾乎總是壞的juju。