簡體   English   中英

將指向結構的指針設置為等於函數返回的指向結構的另一個指針?

[英]Setting a pointer to struct to equal to another pointer to struct returned by a function?

我正在嘗試建立一個鏈表,但由於某種原因,我的頭未正確更新。 以下是我的代碼片段無法正常工作:

typedef struct node {
  int data;
  struct node *next;
} * node;

node create_node(int data) {
  node to_return = calloc(1, sizeof(struct node));
  to_return->data = data;
  to_return->next = NULL;
  return to_return;
}

int insert(int data, node head) {
  if (head == NULL) {
    head = create_node(data);
  }
  .
  .
  .
  }
  return 1;
}

int main(int argc, char **argv) {

  node head = NULL;
  insert(1, head);

  printf("head->data: %d", head->data);
}

在此示例中,我嘗試使用insert()創建鏈接列表的第一個節點。 但是,我遇到了SEG錯誤,這意味着create_node()返回的to_return節點指針未正確設置為insert()中的節點頭。 我在這里想念什么?

編輯:我仔細檢查過,並正確地將頭設置在insert()中。 由於某些原因,更改不會持久

將指針傳遞給節點:

int insert(int data, node* head) {
  if (*head == NULL) {
    *head = create_node(data);
  }
  .
  .
  .
  }
  return 1;
}

int main(int argc, char **argv) {

  node head = NULL;
  insert(1, &head);

  printf("head->data: %d", head->data);
}

(順便說一下,typedef確實令人困惑,因為insert函數的第二個參數實際上是struct node **類型)

在C和C ++中,除非明確標記為引用,否則所有函數參數均按值傳遞。 這包括指針參數。

如果insert函數為空指針,則您的insert函數將嘗試更改第一個參數。 這將不起作用,因為對指針所做的任何更改都不會從該函數傳遞。 如果您想更改head需要將node *headnode& head (在C ++中)傳遞給insert函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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