2012-05-04 49 views
0

我不是高級的C,我更喜歡Java。我在一位夥伴身上看到了下面的代碼,我很好奇它是否可以使用,因爲它不適合他,但他說它應該可以工作,而且錯誤在別的地方。聲明結構爲指針,可能嗎?

typedef struct nameOfStruct { 
    type1 *elem1; 
    type2 *elem2; 
    struct nameOfStruct *next; 
} *nameOfStruct; 

那麼,是不是可以有*nameOfStruct,或者它應該簡單地nameOfStruct

+0

錯誤是什麼?你能詳細說明嗎? – rt2800

+4

請不要走這條路。在C的指針中明確指出。從長遠來看,節省一大堆痛苦,因爲人們忘記它們是指針,需要被釋放。 C沒有垃圾收集器取消鏈接Java。 –

回答

2

這是有效的C,但它會令人難以置信地混淆(nameOfStruct聽起來像一個對象類型,但實際上它是一個指針)。所以避免它。

1

這是不可能回答這個沒有看到調用代碼,但這裏是你應該知道:

*nameOfStruct創建指向struct的別名,這是相當missleading的名稱並不表明它實際上是一個指針。我不會推薦使用它。

如果他想用它作爲struct nameOfStruct的快捷方式,則可以刪除額外的*

0

nameOfStruct是指向struct nameOfStruct的指針。 *nameOfStruct是指向指向struct nameOfStruct的指針。

兩者都是有效的,意思是不同的東西,我想你想使用第一個。儘管如此,你應該命名你的typedef nameOfStruct_ptr,因爲名字很混亂。

+0

我不知道爲什麼這是downvoted。 –

+0

@OliCharlesworth我也沒有。我說錯了什麼?或者有些人心情不好?我不明白。 –