[英]Assigning a pointer in content of a pointer
在代碼中,我們可以看到在*new_node
分配了一個指針。 但在C
*new_node
意味着內容new_node
。 那么,它的原因是什么?為什么它不會造成任何問題?
Node *create_node(int item, Node *next)
{
Node *new_node = (Node *)malloc(sizeof(Node)); //isn't it receiving the pointer as content of(*new_node) new_node?
if (new_node == NULL) {
printf("Error! Could not crate a new Node\n");
exit(1);
}
new_node->data = item;
new_node->next = next;
}
Node *new_node = (Node *)malloc(sizeof(Node));
這會為 Node 結構的新元素分配新的動態內存。 並且分配的內存的基地址存儲在new_node中。
現在, new_node 指向一個新內存,但該內存是空的/垃圾。 它不包含有關節點的任何有用信息。 因此,我們需要在該結構中填充必要的信息以使其有用。
`new_node->data = item;`
new_node->next = next;
這些行將數據復制到新節點分配的內存中,並將新節點與其他節點鏈接起來。
注意:您的代碼片段沒有 return 語句。
在表達式中*new_node
意思是“由new_node
指向的對象”。 但是, Node *new_node = (Node *)malloc(sizeof(Node));
是聲明,不是表達式語句,其中的文本*new_node
也不是表達式。
聲明的第一部分Node *new_node
表示“ new_node
是一個指向Node
的指針。” 聲明的第二部分= (Node *)malloc(sizeof(Node))
表示“將new_node
初始化為(Node *)malloc(sizeof(Node))
。 this 中的=
不是賦值,也不是賦值表達式。 它是在聲明中使用的一種語法,用於為正在定義的對象指定初始值。 被定義的對象是new_node
,而不是*new_node
。
這是聲明和賦值之間的不同語法,您必須習慣它。 Node *new_node = foo;
將new_node
初始化為foo
,但*new_node = foo;
將*new_node
設置為foo
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.