2012-10-19 74 views
-2
#include<stdio.h> 

    typedef struct 
    { 
     int *u; 
     struct node next; 
    } *node; 

    int main() 
    { 
     return 0; 
    } 

什麼意思是*node在這裏?我不明白。我認爲這裏應該有一個節點,但無論如何它正在編譯。結構基礎知識(結構爲指針)

+2

「家庭作業」標記已棄用。不要使用它。 –

+0

你的目標是什麼? – adripanico

+0

@AlexeyFrunze - 從什麼時候開始? –

回答

2

這裏typedef定義了一個新類型,node,它是一個指向結構的指針。

問題中的代碼可能無法編譯,因爲struct node似乎沒有在任何地方定義,但它在結構中使用。

0

比較:

typedef int * pointer_to_int; 

在此,星號是被賦予新名稱的類型的部分,即pointer_to_int是該類型int *的別名。

用你的例子,它是完全一樣的!星號是該類型的一部分,因此node將成爲pointer to struct node { int *u; struct node *next; }類型的別名。

另外,請注意,在typedef中包含星號通常是一個壞主意,因爲它會使代碼更難使用。在C中,知道變量是否是指針通常非常有趣,因此隱藏這個事實並不是很有幫助。

0

正確的定義是:

typedef struct Node { 
    int *u; 
    struct Node *next; 
} *node; 

在你的代碼中有一個struct聲明中的問題;語法是:

struct identifier/tag {struct declaration list} 

結構聲明列表是結構成員的一系列聲明;

typedef聲明提供了一種方法來創建別名,該類型的同義詞;語法是:

typedef type alias 

錯誤在哪裏?

typedef struct { 

在這種情況下,沒有別名!

+1

關於你所做的事情和原因的詳細說明? –

+0

@Surai Menon也許你有興趣進入一個:http://stackoverflow.com/questions/4481603/creating-typedef-pointers-to-typedef-structs-in-c – b3h3m0th

+0

我不是要求自己解釋它。這僅僅是OP,你的答案可能不是很有幫助。 –

0

問題在這裏:

typedef struct 
    { 
     int *u; 
     struct node next; //struct node is NOT defined. 
    } *node; 

這是錯誤的:

它應該是:

typedef struct node{ 
    int *u; 
    struct node *next; 
}*nodeptr; 

該代碼表示​​ 「NODEPTR」 是指向struct node;

0

個人,我從來沒有見過這種聲明。這就要用到是這樣的:

typedef struct { 
    int *u; 
    struct node *next; 
} node; 

這很簡單:要定義一個指針到一個整數和一個指針相同結構的另一個元素的結構。

+1

在你的代碼中,'struct'是匿名的。因此field'next'不是指向類似'struct'的指針,而是指向未定義的'struct node'。 'typedef'與'struct'本身的名字無關('typedef struct {...} name'或多或少等同於'struct __anonymous__ {...}; typedef struct __anonymous__ name') – Virgile

+0

謝謝澄清 – adripanico