web-dev-qa-db-fra.com

Comment créer une nouvelle instance d'une structure en C

En C, lorsque vous définissez une structure. Quelle est la bonne façon de créer une nouvelle instance? J'ai vu deux façons:

struct listitem {
    int val;
    char * def;
    struct listitem * next;
};

La première façon (xCode dit que cela redéfinit la structure et mal):

    struct listitem* newItem = malloc(sizeof(struct listitem));

La deuxième façon:

    listitem* newItem = malloc(sizeof(listitem));

Sinon, existe-t-il une autre façon?

12
Robin Huang

La deuxième façon ne fonctionne que si vous avez utilisé

typedef struct listitem listitem;

avant toute déclaration d'une variable de type listitem. Vous pouvez également simplement allouer statiquement la structure plutôt que l'allouer dynamiquement:

struct listitem newItem;

La façon dont vous avez démontré est comme faire ce qui suit pour chaque int que vous voulez créer:

int *myInt = malloc(sizeof(int));
13
user539810

Cela dépend si vous voulez un pointeur ou non.

Il vaut mieux appeler votre structure comme ceci:

Typedef struct s_data 
{
    int a;
    char *b;
    etc..
}              t_data;

Après l'instancier pour une structure sans pointeur:

t_data my_struct;
my_struct.a = 8;

Et si vous voulez un pointeur, vous devez le malloc comme ça:

t_data *my_struct;
my_struct = malloc(sizeof(t_data));
my_struct->a = 8

J'espère que cette réponse à votre question

14
Prog_is_life
struct listitem newItem; // Automatic allocation
newItem.val = 5;

Voici un bref aperçu des structures: http://www.cs.usfca.edu/~wolber/SoftwareDev/C/CStructs.htm

2
Scott G.