Comment puis-je déclarer et initialiser un tableau de pointeurs vers une structure en C?
J'ai une petite cession en C. je suis en train de créer un tableau de pointeurs vers une structure. Ma question est comment puis-je initialiser chaque pointeur à NULL? Aussi, après j'alloue de la mémoire pour un membre de la matrice, je ne peux pas assigner des valeurs à la structure à laquelle l'élément de matrice de points.
#include <stdio.h>
#include <stdlib.h>
typedef struct list_node list_node_t;
struct list_node
{
char *key;
int value;
list_node_t *next;
};
int main()
{
list_node_t *ptr = (list_node_t*) malloc(sizeof(list_node_t));
ptr->key = "Hello There";
ptr->value = 1;
ptr->next = NULL;
//Above works fine
//Below is erroneous
list_node_t **array[10] = {NULL};
*array[0] = (list_node_t*) malloc(sizeof(list_node_t));
array[0]->key = "Hello world!"; //request for member ‘key’ in something not a structure or union
array[0]->value = 22; //request for member ‘value’ in something not a structure or union
array[0]->next = NULL; //request for member ‘next’ in something not a structure or union
//Do something with the data at hand
//Deallocate memory using function free
return 0;
}
source d'informationauteur user246392
Vous devez vous connecter pour publier un commentaire.
Ici:
Vous êtes à la déclaration d'un tableau de 10 pointeurs de pointeurs de votre structure. Ce que vous voulez est un tableau de 10 pointeurs de votre structure:
C'est déroutant parce que oui,
array
est vraiment un pointeur vers un pointeur, mais la notation crochets sorte de résumés loin pour vous en C, et donc, vous devriez penser dearray
comme un tableau de pointeurs.Vous n'avez pas besoin d'utiliser l'opérateur de déréférencement sur cette ligne:
Parce que C déréférence pour vous avec son support de la notation. Il devrait donc être:
La ligne
list_node_t **array[10] = {NULL};
est mal - ici vous déclarez tableau de pointeurs de pointeurs à la liste des nœuds. Remplacez la par:et cela devrait fonctionner.