J'ai trouvé ce code sur un site Web pour insérer un nœud dans une liste chaînée au début de la liste.Quel est le point d'utiliser le pointeur sur le pointeur?
void push(struct Node** head_ref, int new_data)
{
/* 1. allocate node */
struct Node* new_node = (struct Node*) malloc(sizeof(struct Node));
/* 2. put in the data */
new_node->data = new_data;
/* 3. Make next of new node as head */
new_node->next = (*head_ref);
/* 4. move the head to point to the new node */
(*head_ref) = new_node;
}
C'est la fonction Call-
push(&head, 7);
Ma question est pourquoi aller le long chemin en passant l'adresse d'un pointeur, puis extraire ensuite la valeur à l'adresse à l'intérieur de la fonction. Pourquoi ne pouvons-nous simplement passer le pointeur head
dans la fonction, puis effectuer la cession comme -
new_node->next=head_ref;
?
[Jagged array] (https://en.wikipedia.org/wiki/Jagged_array) –
Parce que la fonction modifie également la valeur de 'head_ref'. Puisque 'head' a un type de pointeur, vous devez passer un pointeur-à-pointeur pour' push' pour mettre à jour la valeur de 'head'. –
Lire [this] (https://stackoverflow.com/a/897400/971127) – BLUEPIXY