0
votes

Quand utilisons-nous la structure variable et le pointeur de structure?

J'ai créé une structure pour une liste Liste liée dans C comme suit. XXX

Puis quand j'ai besoin de Accédez aux propriétés de la structure, je crée un pointeur pour structurer comme suit. xxx

je veux savoir si nous pouvons utiliser si nous pouvons utiliser

noeud de structure nœud1

au lieu de la déclaration actuelle et quels changements apporteraient-ils dans le programme.

aussi, je veux Pour savoir pourquoi * start = null est en dehors de la structure et quel est son type de données?


0 commentaires

4 Réponses :


2
votes

Vous devez attribuer la mémoire pour la structure. Vous avez une fonction simple qui ajoute le nœud à la fin de la liste xxx

démarrage est la variable de type pointeur de type sur le nœud structure .


0 commentaires

1
votes
struct node node1;
node1.data = 12;
node1.next = NULL;

9 commentaires

Trois questions dans deux lignes de code: 1. La coulée du résultat de MALLOC est considérée comme une mauvaise pratique. 2. Ne pas vérifier le résultat du malloc est une erreur grave. 2. L'utilisation de types au lieu d'objets dans le sizeif est considérée comme une mauvaise pratique.


@P__JJ__ Je répondais aux questions et au point. Veuillez vérifier les questions. Et je ne comprends pas ce que vous voulez dire par en utilisant des types au lieu d'objets dans la taille de () est une mauvaise pratique ? Ce n'est pas.


noeud de structure * nœud1 = malloc (taille de (noeud de structure)); doit être noeud de structure * nœud1 = malloc (taille de (* noeud1)); pourquoi? Si vous avez beaucoup de taille similaire de votre code et que vous modifiez le type du type nœud1 Votre code sera erratique. L'utilisation des types est sujette d'erreur. Il a été discuté ici plusieurs fois - recherchez une explication plus détaillée.


Je souhaite si vous pouvez me signaler à une source fiable. Mais votre commentaire est simplement en ce qui concerne un tyo qu'un utilisateur peut faire. De même, l'utilisateur peut endommager * et allouer la taille de point de pointeur s'ils suivent le motif que vous suggérez, c'est-à-dire MALLOC (TailleOf (NODED1)) au lieu de MALLOC (Tailleof (* NODED1 )) .


Lorsque vous passez une journée par semaine à la poursuite de l'erreur difficile pour repérer une erreur causée par votre approche - vous allez changer d'avis.


@P__J____ Je pense que votre commentaire est subjectif plutôt que d'être une bonne pratique ou non en général. BTW, agréable de connaître une vue différente.


@P__J____ Je ne voudrais en effet pas de descendre une question à cause de cela. C'est juste une question de style de codage. Les deux versions sont correctes, bien que la version "Type de pointeur" soit plus sûre, en effet.


@AEP, la remarque de P__J __ sur l'utilisation de Tailleof pour déterminer les tailles d'allocation est absolument décrivant une question de meilleures pratiques. Comme il le dit, cette convention est largement recommandée ici, par de nombreux habitués. Aussi, comme on dit, il réduit les deux probabilité d'erreurs et rend votre code plus résilient à des modifications. Cela ne fait pas l'alternative mal , bien sûr, mais si vous choisissez d'être dans le secteur de la création de recommandations de codage, vous devriez être préparé pour que vos recommandations soient évaluées à une norme plus élevée que "non" mal".


@Johnbollinger Pour moi, la question n'était pas concernant la meilleure pratique pour spécifier Taille lors de l'utilisation de MALLOC et j'étais simplement intéressé à obtenir une opinion de P__JJ __ à sa vue. Comme vous pouvez le voir clairement, je n'essayais pas de vendre mon alternative ici. Personnellement, je pense que le commentaire P__JJ __ était fortement concentré sur une partie de la réponse qui ne concerne pas la vraie question.



1
votes

Quand utilisons-nous la structure variable et le pointeur de structure?

dépend du cas d'utilisation. Lorsque vous créez une variable de structure, vous allouez réellement l'objet de structure sur la pile. Lorsque vous utilisez le pointeur, vous allouer l'objet de structure dans la mémoire du tas et pointez sur cet objet via le pointeur.

Vous pouvez redimensionner et annuler l'objet de structure alloué dynamiquement lorsque vous le souhaitez , tandis que la statique ne peut pas être de la taille de la taille et elle n'est détruite que lorsque la portée de celle-ci se termine (en cas de variable de structure

Plus de détails à La différence entre une allocation statique vs dynamique que vous pouvez trouver dans les liens ci-dessous la réponse.

Quelle manière que vous choisissez, dépend de ce que vous voulez faire et de la façon dont vous voulez le faire. < BlockQuote>

Je veux savoir si nous pouvons utiliser struct node1 au lieu de la déclaration actuelle et des modifications qui apporteraient-elles dans le programme.

qui rendrait nœud1 une variable de la structure elle-même; Ce ne serait pas un pointeur à un objet de la structure que tout seul.

à côté des choses mentionnées ci-dessus et d'autres, l'accès aux membres serait différent: xxx

aussi je veux savoir pourquoi * start = null est en dehors de la structure et de ce que c'est le type de données.

Démarrer est de type structure noeud * (un pointeur sur noeud de structure ) et initialisé à null < / code>. Sa définition est à l'extérieur car ce n'est pas membre, il s'agit d'un pointeur d'un objet de la structure.


Notez que vous devez attribuer un pointeur au noeud structure Pour pointer vers un objet du noeud struct , mais ce n'est pas ce que vous avez fait à l'adresse suivante: xxx

donc, cela invoquerait un comportement non défini. < / p>

allouer la mémoire pour la structure: xxx


lié ​​concernant le point 1.:


6 commentaires

Structure vs Pointer-Structure n'est pas nécessairement une question de pile vs . tas.


@Johnbollinger Oui, vous avez raison. Mais IMHO, un pointeur pour structurer est beaucoup plus souvent utilisé avec l'allocation de mémoire dynamique que pour simplement les structures allouées statiques statiques.


Je ne suis pas en désaccord, mais cela n'est pas pertinent. Les parties de cette réponse sur la pile et le tas ne répondent pas à la question de la part de l'OP qui posait et compte tenu du niveau apparent de C de l'OP, je compte que ces parties sont plus susceptibles de bouleverser la question que d'être utiles.


La question de Johnbollinger OP est " Quand utilise-t-on la structure variable et le pointeur de structure? " - une différence principale dans l'utilisation intentionnelle est la préoccupation où stocker ou plus précise statique vs attribution dynamique et ainsi expliquer la pile et le tas auraient un sens.


@Johnbollinger étant donné que, que changeriez-vous en particulier? Supprimer les liens ou mentionner la pile et le tas en général?


La question ne se pose même pas directement sur la durée statique automatique vs allouée de la durée de stockage, bien que que facteur dans une bonne réponse. Oui, j'éliminerais toute discussion sur la pile et le tas, qui ne sont pas des concepts C en premier lieu. La question concerne la syntaxe et la sémantique des structures, des pointeurs de structure et de leurs déclarations, et c'est déjà beaucoup de choses à parler sans surcharge ni à districts de l'OP.



1
votes

[...] quand j'ai besoin d'accéder aux propriétés de la structure, je crée un pointeur pour structurer comme suit. p>

(*node_ptr).data = 42;
(*node_ptr).next = NULL;

0 commentaires