Ho un piccolo compito in C. Sto cercando di creare una serie di puntatori a una struttura. La mia domanda è come posso inizializzare ogni puntatore a NULL? Inoltre, dopo aver allocato memoria per un membro dell'array, non posso assegnare valori alla struttura a cui punta l'elemento dell'array.Come posso dichiarare e inizializzare un array di puntatori a una struttura in C?
#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;
}
Questa è una buona risposta, se non che 'array' è ** non ** "in realtà un puntatore a un puntatore". 'array' è in realtà un array, non un puntatore di alcun tipo. I tipi di matrice utilizzati in un'espressione vengono valutati in un puntatore al primo elemento dell'array, ma un array è ancora un tipo reale, distinto dai puntatori. 'sizeof array' dovrebbe aiutarti a convincerti che' array' non è un puntatore. – caf
invece di 'array [0] = (list_node_t *) malloc (sizeof (list_node_t));' Va 'array [0] = malloc (sizeof (list_node_t));' non fare chiamate malloc typecast. –