我從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節點?他只是簡單的創建指針變量,然後簡單地取消引用它們....
'結構節點*節點= malloc的(的sizeof(*節點))'肯定 '創建' 它。 – user3125367 2014-09-22 03:10:20
關於指針(而不僅僅是節點)的要點是,如果您的頭節點固定在堆棧上,則不能安全地添加新元素。 – user3125367 2014-09-22 03:12:56
那麼,你試着拿出malloc的,看看你有多遠。那些是節點。你應該查看malloc的功能。 – Matt 2014-09-22 03:15:17