Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
721 connectés 

  FORUM HardWare.fr
  Programmation

  [c++] petite question sur les pointeurs (pas un problème)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c++] petite question sur les pointeurs (pas un problème)

n°85247
Ventilo
Ventilo? Depuis 1998!
Posté le 31-12-2001 à 21:32:50  profilanswer
 

Vite un visuel:
 
void CreateCaca(untype *ent);
//---------------------------
 
void main()
{
    untype *caca;
 
    CreateCaca(caca);
}
 
pourquoi pas:
void main()
{
    untype caca;
 
    CreateCaca(&caca);
}
 
?? ya une différence?

mood
Publicité
Posté le 31-12-2001 à 21:32:50  profilanswer
 

n°85248
sylvano
Posté le 31-12-2001 à 22:29:57  profilanswer
 

Ventilo a écrit a écrit :

Vite un visuel:
 
void CreateCaca(untype *ent);
//---------------------------
 
void main()
{
    untype *caca;
 
    CreateCaca(caca);
}
 
pourquoi pas:
void main()
{
    untype caca;
 
    CreateCaca(&caca);
}
 
?? ya une différence?  




 
oui :  
la deuxieme solution est un passage par référence : il se peut qu'à la sortie de la fonction CreateCaca() la variable caca soit modifiée (ca dépend de ce que tu fais dans cette fonction) alors que ce n'est pas le cas dans la première solution

n°85254
LetoII
Le dormeur doit se réveiller
Posté le 01-01-2002 à 00:43:55  profilanswer
 

c pas ça du tout.
 
Ta fonction attend un pointeur vers une variable de type untype, c'est à dire une variable qui contient l'adresse d'une autre variable qui est du type untype.
 
untype *caca va déclarer un pointeur, c'est à dire une variable qui poura recevoir l'adresse d'une variable de type untype, donc quand tu passe caca à ta fonction ça marche par ce qu'elle reçoit bien l'adresse d'une variable comme argument.
 
maintenent : untype caca déclare une varible de type untype, si tu passe &caca à ta fonction tu lui passe directement l'adresse de la variable caca sans utiliser de variavle intermédiaire.
 
le résultat est donc le même, attention toutefois quand tu tape untype *caca caca ne pointe sur rien en particulier, il est donc prudent d'initialiser systèmatiquement tout les pointeurs.

 

[edtdd]--Message édité par letoII--[/edtdd]

n°85256
Ventilo
Ventilo? Depuis 1998!
Posté le 01-01-2002 à 02:10:58  profilanswer
 

Donc si je comprend bien tout cela dépend des goûts du programeur?
 
Le seul endroit où il faut absolument utiliser un pointeur c'est lors du polymorphisme?  
ClassDeBase *moi = new ClasseDérivé()?

n°85292
sylvano
Posté le 01-01-2002 à 15:03:58  profilanswer
 

letoII a écrit a écrit :

c pas ça du tout.
 
Ta fonction attend un pointeur vers une variable de type untype, c'est à dire une variable qui contient l'adresse d'une autre variable qui est du type untype.
 
untype *caca va déclarer un pointeur, c'est à dire une variable qui poura recevoir l'adresse d'une variable de type untype, donc quand tu passe caca à ta fonction ça marche par ce qu'elle reçoit bien l'adresse d'une variable comme argument.
 
maintenent : untype caca déclare une varible de type untype, si tu passe &caca à ta fonction tu lui passe directement l'adresse de la variable caca sans utiliser de variavle intermédiaire.
 
le résultat est donc le même, attention toutefois quand tu tape untype *caca caca ne pointe sur rien en particulier, il est donc prudent d'initialiser systèmatiquement tout les pointeurs.  
 
 




 
parfaitement exact : je me suis trompé et je n'ai aucune excuse, j'ai pas lu assez attentivement.

n°85297
verdoux
And I'm still waiting
Posté le 01-01-2002 à 15:23:59  profilanswer
 

De toute façon le premier ne marchera pas.
untype *caca; n'initialise pas le pointeur. L'adresse sur lequel il pointe est indéterminée.
 
Ensuite CreateCaca(caca) appelle la fonction CreateCaca avec une copie du pointeur caca: c'est à dire que ent est un pointeur qui pointe sur l'adresse de caca (indéterminée). Mais CreateCaca ne peut initialiser le pointeur caca.
 
Pour le faire il faut écrire:

Code :
  1. void CreateCaca(untype **ent);
  2. void main()
  3. {
  4.    untype *caca;
  5.    CreateCaca(&caca);
  6. }


 
Où CreateCaca fait un truc du genre:
*ent = (untype*)malloc(sizeof(untype));

n°85332
LetoII
Le dormeur doit se réveiller
Posté le 01-01-2002 à 20:34:57  profilanswer
 

Ventilo a écrit a écrit :

Donc si je comprend bien tout cela dépend des goûts du programeur?
 
Le seul endroit où il faut absolument utiliser un pointeur c'est lors du polymorphisme?  
ClassDeBase *moi = new ClasseDérivé()?  




 
Non, les pointeurs peuvent servir à plein de choses autres que l'allocations dynamique: parcour d'un tableau, création de listes chaînées, arbres....

n°85333
LetoII
Le dormeur doit se réveiller
Posté le 01-01-2002 à 20:36:11  profilanswer
 

Verdoux a écrit a écrit :

De toute façon le premier ne marchera pas.
untype *caca; n'initialise pas le pointeur. L'adresse sur lequel il pointe est indéterminée.
 
Ensuite CreateCaca(caca) appelle la fonction CreateCaca avec une copie du pointeur caca: c'est à dire que ent est un pointeur qui pointe sur l'adresse de caca (indéterminée). Mais CreateCaca ne peut initialiser le pointeur caca.
 
Pour le faire il faut écrire:

Code :
  1. void CreateCaca(untype **ent);
  2. void main()
  3. {
  4.    untype *caca;
  5.    CreateCaca(&caca);
  6. }


 
Où CreateCaca fait un truc du genre:
*ent = (untype*)malloc(sizeof(untype));  




 
c vrai, mais bon sous réserves que le pointeur pointe effectivement sur qqc ça marche


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [c++] petite question sur les pointeurs (pas un problème)

 

Sujets relatifs
probleme en HTML ??? besoin d'aide svpquestion simple : jsp ? servlet ?
Question de newbie: c'est quoi php nuke ??[ASP et SQL] Probléme pour récupérer la valeur de la fonction sql MAX
[Unix/Programmation Shellscript] Aide pour une question de Prog[HTML]Question toute conne au sujet des liens
[HTeuMeuLeu] Une ptit question au sujet de la balise <form>...[PHP] Question spéciale newbies...
probleme pour lire un fichier en ASP??,Question Php
Plus de sujets relatifs à : [c++] petite question sur les pointeurs (pas un problème)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR