簡體   English   中英

在指針的內容中分配指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM