En cours certaines choses ont été vu mais j'ai raté quelques cours, j'essaye alors de comprendre certains éléments de mon cours... Pouvez-vous m'aider je vous prie...
On a définie en language c un type structuré dynarray contenant un pointeur content vers un tableau d'entier alloué dans le tas, un entier size representant le nombre d'éléments dans la structure et un entier alloc representant la taille allouée par le tableau content
Or je ne comprends pas d'une, que représente le malloc, quelle est le paramètre qui est mis au sein du malloc et que renvoie t-il ? Aussi pouvez vous je vous prie m'expliquer chaques lignes en détail, que se passe t-il à chaques étape ? Qu'est ce que la -> ? ...
Le "paramètre" qui est mis au sein de malloc dans la ligne dynarray rep = malloc(sizeof(struct dynarray)); est sizeof(struct dynarray)
sizeofest un opérateur du langage C qui renvoie en bytes la taille occupée en mémoire d'un type ou d'une expression. Ici, c'est la taille occupée par le type struct dynarray qui est renvoyée, ce qui permet à malloc()de réserver la bonne quantité de mémoire pour un élément du type struct dynarray et à cette ligne d'affecter l'adresse mémoire ainsi réservée à un pointeur sur le type struct dynarray (note : voir mon edit ci-dessous)
La déclaration typedef fait du "tout en un" particulièrement alambiqué et trompeur en définissant dynarray comme étant un alias du type struct dynarray * c'est à dire un pointeur sur struct. C'est le type de trucs parfait pour se tirer une balle dans le pied car le typedef masque la nature réelle de l'objet manipulé.
Le code que tu veux qu'on te commente est un code qui compile et qui fait son boulot, il retourne bien un pointeur sur un struct dynarray qui contient un tableau vide. Mais quelqu'un qui écrirait cela se ferait virer dans l'heure dans ma boite! Ton prof arrive à avoir un même nom (dynarray) qui désigne 2 types différents et dont un est un pointeur! Par exemple la première ligne dans la fonction utilise 2 fois ce mot, mais ce sont 2 choses distinctes.
Je crains donc que ses explications sur les pointeurs soient insuffisantes. Tu devrais aussi lire sur le même site que t'a conseillé la section concernant les pointeurs. Et reviens pour des explications complémentaires.
La flèche permet de déréférencer un membre de la struct, c’est à dire que "a->foo" est équivalent à "(*a).foo".
Mais ce que je ne comprends pas c’est pourquoi allouer un tableau vide ? Et qui plus est en réservant la place pour un entier ?? Donc c’est pas un tableau vide... Et en plus dynarray est un pointeur ? Doux Jesus
Un tableau vide ça serait plutôt "struct dynarray tab = {0};"
Et c’est en ajoutant des éléments (avec une fonction "push" par exemple) que ça ferait une allocation si besoin
Si tu ne comprends pas *, ->, malloc c'est que tu n'as pas les connaissances de bases sur les pointeurs.
Tu parles de ton prof, donc tu as des cours. Revois les, discutes-en avec ton prof. Il est payé pour ça et en plus il sera content de voir qu'il y en a au moins un qui essaie de s'intéresser.
@jadesalina il n'alloue pas un tableau vide, mais de un élement (alloc) dont pour l'instant, zero (size) est utilisé.
(En général c'est pas malin de commencer par un seul, parce qu'un malloc réserve en pratique une taille utile arrondie au multiple suivant de 32 ou 64. Et que la probabilité de n'avoir qu'un élément dans le tableau est très faible. Donc, des reallocs inutiles (et coûteux) ensuite. Mais c'est une autre histoire)
- Edité par michelbillaud 8 janvier 2022 à 13:13:29
Problème de compréhension sur un code... (tableau)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
En recherche d'emploi.