Pointer des structures

Résolu/Fermé
seljazou Messages postés 175 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 25 décembre 2009 - 23 nov. 2009 à 14:39
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 23 nov. 2009 à 21:54
Bonjour,

Encore les pointeurs !!!! :(

S'il vous plait, aidez moi à comprendre.

On suppose qu'on a une structure famille.

struct famille *famille1;

famille1 est un pointeur vers une variable de type structure ( ici famille).
c'est quoi alors la valeur de pointeur? c'est l'adresse de *famille1, mais .... ça n'a pas de valeur!!!! non? On peut avoir les valeurs des champs d'une structure, et non la valeur de la variable de type structure..

Ah ma tête :p

2 réponses

loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
23 nov. 2009 à 15:46
c'est quoi alors la valeur de pointeur? c'est l'adresse de *famille1, mais .... ça n'a pas de valeur!!!!Ben si, comme le dit Paco, cette valeur est l'adresse où doit se trouver une structure de type famille.
Sauf qu'ici, après la simple déclaration struct famille *famille1;, aucune mémoire n'est réservée et la valeur du pointeur est n'importe quoi; il est donc nécessaire de réserver de la mémoire afin que le pointeur ait une valeur correcte, c'est-à-dire qu'il 'pointe' sur une adresse mémoire valide.
Note qu'on se fiche complètement de la valeur du pointeur en tant que telle, l'important est d'être certain que l'adresse représentée par cette valeur, est valide.
Bonne réflexion et n'oublie pas de refroidir les neurones.
1
seljazou Messages postés 175 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 25 décembre 2009 1
23 nov. 2009 à 19:27
désolée, je me suis mal exprimée. je reformule.

struct famille *famille1;

famille1 est un pointeur sur une variable (*famille1) qui est de type famille.

quelle est alors la valeur de *famille1 ? Je ne crois pas que ça existe, puisque *famille contient plusieurs champs.

J'espère que ma question est plus claire :)
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661 > seljazou Messages postés 175 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 25 décembre 2009
23 nov. 2009 à 19:51
famille1 est un pointeur sur une struct famille ;), c'est un struct famille * .

Ce que tu peux faire, si famille1 pointe effectivement déjà sur une struct crée correctement , c'est utiliser " *famille1 " comme une véritable variable de type struct famille. Sa "valeur" comme tu dis est en fait tout le contenu mémoire de la struct famille vers laquelle il pointe. Voir https://c.developpez.com/faq/?page=Les-pointeurs#POINTEURS_struct

Si tu veux utiliser un des champ, tu peux faire (*famille1).NomDuChamp ou plutôt famille1->NomDuChamp si tu veux la valeur d'un champ
struct famille maFamille1;
struct famille * pointVersUneFam;
// si maintenant tu utilises " *pointVersUneFamille " c'est une erreur car pointVersUneFam ne pointe sur rien
pointVersUneFam = &maFamille1 ; // maintenant pointVersUneFam pointe bien vers qqchose.
struct famille maFamille2;
maFamille2 = *pointVersUneFam; // j'ai un petit doute mais il me semble bien que cette ligne assigne maFamille2 avec toutes les valeurs de maFamille1.


tu vois donc que " *pointVersUneFam " a une "valeur" utilisable, c'est celle d'une variable struct ;) , ce que , si j'ai bien compris, tu disais ne pas être une véritable valeur. Je crois que c'est juste une question de mots. C'est clair là ?
0
seljazou Messages postés 175 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 25 décembre 2009 1 > Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013
23 nov. 2009 à 20:21
Devine, j'étais en train de lire le même page internet que tu m'as envoyée :p


la valeur de ce *famille1 est donc tout le contenu mémoire de la variable *famille1?

J'espère que c ça, c plus logique :)

merci
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661 > seljazou Messages postés 175 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 25 décembre 2009
23 nov. 2009 à 21:04
oui... enfin le terme "variable", c'est plutot : "*famille1 est le contenu mémoire de la variable vers laquelle pointe famille1". A noter que famille1 ne pointe pas forcément vers une variable "standard", mais peut-être vers une struct famille crée dynamiquement avec malloc
0
seljazou Messages postés 175 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 25 décembre 2009 1 > Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013
23 nov. 2009 à 21:18
compris !

c résolu. Merci.

PS: auj on a commencé le cours sur le JAVA :s
Courage... Courage... :D

merci beaucoup :)
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
23 nov. 2009 à 14:52
la valeur de ce pointeur c'est l'adresse mémoire où se trouve une structure famille.
0