2014-09-22 42 views
0

我從this article.創建鏈表時,我們不需要創建實際節點嗎?

學習鏈表教程的作者從來沒有產生實際的節點,但類型的節點只指針變量,你可以用下面的代碼看...

struct node* head = NULL; 
struct node* second = NULL; 
struct node* third = NULL; 

然後他在堆中爲它們分配空間...

head = (struct node*)malloc(sizeof(struct node)); 
second = (struct node*)malloc(sizeof(struct node)); 
third = (struct node*)malloc(sizeof(struct node)); 

爲什麼他沒有創建實際節點?對於這應該是這個樣子的代碼...

struct node head; 
struct node second; 
struct node third; 

如果我的知識是正確的(糾正我,如果我錯了)。簡單地聲明指針變量不會產生實際的變量(在鏈表的情況下節點),因此使用代碼

head->data = 1; 

我的意思是,不能被解除引用類的文章在本教程的作者如果工作,那麼爲什麼這不工作?

int *a; 
a=5; 
printf("%d",*a); 

顯然,上述代碼不輸出5.

這意味着,另一個變量需要被創建,然後它需要說明的是該變量的地址被存儲在一個指針變量,纔可以解除引用...如下面的代碼...

int *a; 
int b=5; 
a=&b; 
printf("%d",*a); 

此輸出5.

那麼,如何筆者逃脫了沒有創造日e節點?他只是簡單的創建指針變量,然後簡單地取消引用它們....

+1

'結構節點*節點= malloc的(的sizeof(*節點))'肯定 '創建' 它。 – user3125367 2014-09-22 03:10:20

+0

關於指針(而不僅僅是節點)的要點是,如果您的頭節點固定在堆棧上,則不能安全地添加新元素。 – user3125367 2014-09-22 03:12:56

+0

那麼,你試着拿出malloc的,看看你有多遠。那些是節點。你應該查看malloc的功能。 – Matt 2014-09-22 03:15:17

回答

4

的節點是在堆中,這就是malloc是。

要使用的代碼,而鏈表來解釋,它類似於:

int *a = NULL; 
a = malloc(sizeof(int)); 
*a = 5; 
printf("%d",*a); 
0

指針被創建,這樣他們可以參考address.Since正常結構變量不能存儲的地址結構,這句法是錯的。 struct node head; struct node second; struct node third;