malloc un tableau de pointeurs struct vs tableau de structs
Quelle est la différence entre
struct mystruct *ptr = (struct test *)malloc(n*sizeof(struct test));
et
struct mystruct **ptr = (struct test *)malloc(n*sizeof(struct test *));
Ils travaillent tous les deux beaux, je suis juste curieux au sujet de la différence réelle entre les deux. Le premier allouer un tableau de structures, tandis que le second un tableau de struct pointeurs? Dans l'autre sens? Aussi, qui a une plus petite empreinte mémoire?
source d'informationauteur alf
Vous devez vous connecter pour publier un commentaire.
La première alloue un tableau de
struct
et de l'autre alloue un tableau de pointeursstruct
. Dans le premier cas, vous pouvez écrire à des champs par l'affectation deptr[0].field1 = value;
immédiatement, tandis que dans le second cas, vous devez attribuer lesstruct
lui-même avant de faire le travail d'écriture proprement dit.C'est OK pour déposer le casting de
malloc
résultat dans C, de sorte que vous pouvez écrireLa fonction
malloc
n'a pas affaire à des structures ou des pointeurs. Il ne comprend octets. Donc, la première alloue suffisamment d'octets pour nstruct test
objets, dont la deuxième alloue suffisamment d'espace pour nstruct test *
objets.L'aspect des choses, le 2 serait utilisé pour très différentes choses. Par exemple, dans le second cas, vous devez allouer de la mémoire pour chaque
ptr[i]
élément.Vous pouvez répondre vous-même si vous imprimez
sizeof(struct test)
etsizeof(struct test *)
. Mais encore une fois, ils sont des choses différentes, avec des buts différents. A une plus petite empreinte, d'un tracteur ou d'un coléoptère ?La première alloue un tableau de structures. Le deuxième alloue un tableau de pointeurs vers des structures (pas de mémoire pour les structures elles-mêmes). Ainsi, la deuxième est plus petite, à moins bien sûr de votre structure est également très faible, comme un pointeur.