Mais...a quoi servent les pointeurs???

Mais...a quoi servent les pointeurs??? - C++ - Programmation

Marsh Posté le 20-08-2004 à 15:02:06    

LUT!
J'ai actuellement un bon livre sur le C++, de la ressource internet etc... et j'ai beau lire tout ce qui concerne les pointeurs, ca me parait trés jolli mais... a quoi ca sert? Quand est-ce qu'on les utilises le + souvent? Parce que j'ai bien vu des endroits ou je pouvais m'en servir mais ou ca ne changer rien et ce n'était pas plus court alors....  
Ps: je rappel que je suis débutant!!!


---------------
!jb!
Reply

Marsh Posté le 20-08-2004 à 15:02:06   

Reply

Marsh Posté le 20-08-2004 à 15:03:52    

Hé bien, plutot que de faire un long discours, je dirais juste  que lorsque tu en auras vraiment besoin, tu le verras tout seul. Tant que tu peux t'en passer, passe toi z'en.

Reply

Marsh Posté le 20-08-2004 à 15:13:44    

ok ok !!! "chaque chose en son temps"  
mici


---------------
!jb!
Reply

Marsh Posté le 20-08-2004 à 15:27:01    

Les listes chaînées par exemple.

Reply

Marsh Posté le 20-08-2004 à 15:27:42    

qd tu en auras besoin, pense que les pointeurs intelligents existent (std::auto_ptr, boost::shared_ptr, ...)


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 20-08-2004 à 15:45:47    

Déjà, ça sert à créer dynamiquement des objets, ça sert au polymorphisme, ...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 20-08-2004 à 15:49:02    

HelloWorld a écrit :

Déjà, ça sert à créer dynamiquement des objets, ça sert au polymorphisme, ...


 
Comment achever un débutant, tome 1 [:joce]
laisse lui le tps, crediou :o

Reply

Marsh Posté le 20-08-2004 à 16:32:46    

à quoi ça sert ? très simple.
 
tu me fais une fonction qui retourne le plus grand et le plus petit élément d'un tableau passé en param. tu verras bien ou est le problème
 
edit : entre autre hein, y'a pas que ça :o


Message édité par jagstang le 20-08-2004 à 16:33:02
Reply

Marsh Posté le 20-08-2004 à 17:37:42    

JagStang a écrit :

à quoi ça sert ? très simple.
 
tu me fais une fonction qui retourne le plus grand et le plus petit élément d'un tableau passé en param. tu verras bien ou est le problème
 
edit : entre autre hein, y'a pas que ça :o


 

Code :
  1. const int TAB_SIZE = 40;
  2. struct type_de_retour
  3. {
  4.     int plus_petit;
  5.     int plus_grand;
  6. };
  7. type_de_retour parcourir_tableau(int tab[TAB_SIZE])
  8. {
  9.    type_de_retour a;
  10.    // .............
  11.    return a;
  12. }


 :D
Vas y Taz, défoule toi, c'était juste pour la déconne  :p


Message édité par Ace17 le 20-08-2004 à 17:39:31
Reply

Marsh Posté le 20-08-2004 à 21:28:36    

JagStang a écrit :


tu me fais une fonction qui retourne le plus grand et le plus petit élément d'un tableau passé en param. tu verras bien ou est le problème


 
bool plusgrandpluspetit(const std::vector<int> tab, int &plusgrand, int &pluspetit);
 
un truc du genre (merci de pas me jeter des pierres)
 
y a pas de pointeurs, non ? :D


Message édité par antp le 20-08-2004 à 21:31:00

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 20-08-2004 à 21:28:36   

Reply

Marsh Posté le 20-08-2004 à 21:34:27    

normal, le passage par reference permet justement de les eviter en c++, tout les exemples de passage en parametre ne valent que pour le c  il me semble

Reply

Marsh Posté le 21-08-2004 à 01:01:08    

mais si je veux la plus petite valeur ou la plus grand je fais un ptit algorithme qui me les trouves,en quoi les pointeurs m'aide spécialement???


---------------
!jb!
Reply

Marsh Posté le 21-08-2004 à 02:48:26    

le problème, c'est que tu veux une méthode qui trouve à la fois le plus petit et le plus grand, mais qu'une méthode ne peut renvoyer qu'une seule chose...
 
La solution est donc de passer à la méthode les deux adresses où elle doit stocker le min et max, en plus d elui passer le tableau :
 
void MinMax(int s, float * tab, float * min, float * max)
{
  .......
  *min = ....
  *max = ....
}


Message édité par deltaden le 21-08-2004 à 02:52:01
Reply

Marsh Posté le 21-08-2004 à 03:15:14    

ah oui c vrai que ca peut servir!!!


---------------
!jb!
Reply

Marsh Posté le 21-08-2004 à 11:01:14    

y a le passage par référence pour éviter ça :o Cf mon post précédent


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 21-08-2004 à 11:13:40    

les pointeurs ça ne sert.. à rien  
 
Mais en meme temps on peut rien faire sans eux..
 
Étonnant n'est-ce pas?

Reply

Marsh Posté le 21-08-2004 à 11:20:45    

Ace17 a écrit :

Code :
  1. const int TAB_SIZE = 40;
  2. struct type_de_retour
  3. {
  4.     int plus_petit;
  5.     int plus_grand;
  6. };
  7. type_de_retour parcourir_tableau(int tab[TAB_SIZE])
  8. {
  9.    type_de_retour a;
  10.    // .............
  11.    return a;
  12. }


moi je vois bien un pointeur dans ton exemple

Reply

Marsh Posté le 21-08-2004 à 12:37:37    

Taz a écrit :

moi je vois bien un pointeur dans ton exemple


tab ?

Reply

Marsh Posté le 21-08-2004 à 12:40:22    

:jap:


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 21-08-2004 à 12:44:01    

ben oui

Reply

Marsh Posté le 21-08-2004 à 12:48:07    


Ca veut dire que je progresse dans mon apprentissage alors, youpi :bounce:  
 
:D

Reply

Marsh Posté le 21-08-2004 à 12:50:35    

t'as procédé par élimination. si je t'avais pas dit qu'il y en avait un, tu l'aurais pas trouvé

Reply

Marsh Posté le 21-08-2004 à 12:52:20    

Taz a écrit :

t'as procédé par élimination. si je t'avais pas dit qu'il y en avait un, tu l'aurais pas trouvé


Même pas j'ai tout de suite regardé ce tab...  :sarcastic:

Reply

Marsh Posté le 21-08-2004 à 14:14:59    

bon ok tab c un pointeur mais bon je parlais surtt de tous les trucs avec &, * et compagnie, parce que sinon c sure les tableau je les utilises tout le temps!
et puis le fait de dire que avec les pointeurs on peut faire une fonction renvoyant plusieurs valeurs c vrai que c la meme chose avec le passage par référence!


---------------
!jb!
Reply

Marsh Posté le 21-08-2004 à 14:17:52    

oui. mais un référence est "une sorte de" pointeur. donc on parle plus ou moins de la même chose.
 
merci de pas troller.

Reply

Marsh Posté le 21-08-2004 à 14:23:29    

ah oui ok, mais donc sinon je reformule ma question : a quoi servent les pointeurs comme int* ???
en fait je vois a quoi sa sert avec les chaines de characteres car bcp de fonctions demande la taille donc ca peut servir mais sinon
ps: ca veut dire quoi troller?


Message édité par lunarnet76 le 21-08-2004 à 14:23:43

---------------
!jb!
Reply

Marsh Posté le 21-08-2004 à 14:42:39    

Reply

Marsh Posté le 21-08-2004 à 15:03:14    

Imagine que tu aies une liste d'objets du meme type, type comportant un attribut "taille" et un attribut "masse". Comment ferais-tu pour avoir deux classements de ces objets ( un selon chaque attribut ) sans pour autant dupliquer les objets?

Reply

Marsh Posté le 21-08-2004 à 15:06:04    

Ca sert aussi a faire des listes chainées
Comment achever un débutant, tome 1, premier chapitre [:joce]  

Reply

Marsh Posté le 21-08-2004 à 15:06:41    

Ca sert aussi a faire de l'allocation dynamique de mémoire

Reply

Marsh Posté le 21-08-2004 à 15:07:40    

oh il est trop bien le lien, merci jagstang!!!


---------------
!jb!
Reply

Marsh Posté le 21-08-2004 à 16:16:32    

antp a écrit :

y a le passage par référence pour éviter ça :o Cf mon post précédent


je sais :o
 
Mais les pointeurs, c'est plus fun :D

Reply

Marsh Posté le 21-08-2004 à 17:41:37    

deltaden a écrit :

je sais :o
 
Mais les pointeurs, c'est plus fun :D


 
[:dawa]
bon, celle là je la quote, ça pourra servir de preuve plus tard, quand le C sera mort...
ils ne nous croiront jamais.

Reply

Marsh Posté le 21-08-2004 à 17:44:22    

ahaha ... faut pas tout confondre. les pointeurs sont une notion fondamentale. avoir la possibilité de les faire pointer n'importe ou (ou plutot ne pas exercer de controle dessus our des raisons d'efficacité et d'implémentation) est une chose différente

Reply

Marsh Posté le 21-08-2004 à 19:18:05    

Taz notre maître tout puissant, guidez-nous vers la voie de la sagesse. Amen !

Reply

Marsh Posté le 21-08-2004 à 22:48:48    

raytaller a écrit :

[:dawa]
bon, celle là je la quote, ça pourra servir de preuve plus tard, quand le C sera mort...
ils ne nous croiront jamais.


 
On sera morts avant :D


---------------
Un matin je me lèverai et il fera beau.
Reply

Marsh Posté le 21-08-2004 à 23:26:57    

JagStang a écrit :

oui. mais un référence est "une sorte de" pointeur. donc on parle plus ou moins de la même chose.
 
merci de pas troller.


 
parfois ce ne sont pas "des pointeurs" hein  [:boidleau]


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 22-08-2004 à 02:11:15    

lunarnet76 a écrit :

LUT!
J'ai actuellement un bon livre sur le C++, de la ressource internet etc... et j'ai beau lire tout ce qui concerne les pointeurs, ca me parait trés jolli mais... a quoi ca sert? Quand est-ce qu'on les utilises le + souvent? Parce que j'ai bien vu des endroits ou je pouvais m'en servir mais ou ca ne changer rien et ce n'était pas plus court alors....  
Ps: je rappel que je suis débutant!!!


 
ca se voit !  
 
et ca sert partout. je vais pas prendre un objet mais une structure. disons que tu as un fichier avec des enregistrements. donc la structure est de la forme  
 
 
typedef tadresse struct {
char nom[30]:
char prenom[30]:
char adresse[100]:
// et autres informations...
...
};
 
et par exemple on a un tableau d'adresse
 
tadresse clientsRam [1024];  
 
ensuite dans une fonction tu veux passer le tableau pour faire des traitements dessus donc logiquement tu ferais  
 
int proc_client (tadresse tab) {
// et pas mal de trucs....
 
}
 
ca dépends du compilo que tu as, mais il risque de te charger toutes les 1024 adresses dans la pile. autant dire que c'est un coup à tout planter.  
 
mais alors comment on fait pour traiter notre fichier d'adresse sans bleuir l'ecran de notre client. Et bien on va prendre un pointeur sur le tableau d'adresse.  
 
don notre fonction devient  
 
int proc_client_quivamieux (tadresse *pt) {
// des trucs qui ont des chances de s'executer.
}
 
 
ce qui va se passer c'est que l'on va pas mettre directement les données dans les parametres, mais on va indiquer l'emplacement de ces données en mémoire.  
 
alors pour avoir le 3eme enregistrement il te faut avoir quoi ?  
 
et bien *(pt+2) et alors pt += 2; fait que le contenu de pt dit *pt; pointe maintenant sur le 3eme élément.  
 
 
les pointeurs ca sert à faire des liaisons entre des elements. par exemple dans des listes chainées.  
 
tu as alors  
 
typedef tligne_commande struct {
int codeproduit;  
double prix;
int qte;
 
// chainage vers la suivante
tligne_commande *pt_suivant;  
// retour vers le précédent;
tligne_commande *pt_précédent;  
// le premier
tligne_commande *pt_debut;
 
// chainage sur l'entete de la commande
// nomclient, date, codecommande.  
tentete_commande *pt_entete;
}
 
ca permet de faire des tableau de dimensions infinies ou plutot de dimensions non connues.  
 

Reply

Marsh Posté le 22-08-2004 à 09:09:57    

p lejarre a écrit :

ca se voit !  
 
et ca sert partout. je vais pas prendre un objet mais une structure. disons que tu as un fichier avec des enregistrements. donc la structure est de la forme  
 
 
typedef tadresse struct {
char nom[30]:
char prenom[30]:
char adresse[100]:
// et autres informations...
...
};

c'est du C. merci de sortir. c'est d'ailleurs du C qui ne compile pas.

p lejarre a écrit :


et par exemple on a un tableau d'adresse
 
tadresse clientsRam [1024];  
 
ensuite dans une fonction tu veux passer le tableau pour faire des traitements dessus donc logiquement tu ferais  
 
int proc_client (tadresse tab) {
// et pas mal de trucs....  
 
}
 
ca dépends du compilo que tu as, mais il risque de te charger toutes les 1024 adresses dans la pile. autant dire que c'est un coup à tout planter.

ton tableau clientsRam peut résider dans la pile ou dans le segment de données non-iniatilisé selon l'emplacement de sa déclaration. quand à ta fonction : elle passe __une__ structure par copie.

p lejarre a écrit :


mais alors comment on fait pour traiter notre fichier d'adresse sans bleuir l'ecran de notre client. Et bien on va prendre un pointeur sur le tableau d'adresse.  
 
don notre fonction devient  
 
int proc_client_quivamieux (tadresse *pt) {
// des trucs qui ont des chances de s'executer.
}

t'auras beau essayer tu n'arriveras jamais à passer un tableau par copie. cette version de ta fonction ne permet de passer en paramètre qu' __une__ structure. pour modification ou paramètre de sortie. pour passer un tableau, il faut un paramètre additionnel 'size_t n' qui est le nombre d'éléments du tableau.
 
ce qui va se passer c'est que l'on va pas mettre directement les données dans les parametres, mais on va indiquer l'emplacement de ces données en mémoire.  

p lejarre a écrit :


alors pour avoir le 3eme enregistrement il te faut avoir quoi ?  
 
et bien *(pt+2) et alors pt += 2; fait que le contenu de pt dit *pt; pointe maintenant sur le 3eme élément.

tu t'es déjà assez enfoncé comme ça, pas la peine de faire le warrior des pointeurs. pt[2] est très bien.
 

p lejarre a écrit :


les pointeurs ca sert à faire des liaisons entre des elements. par exemple dans des listes chainées.  

rien à voir. c'est à cause de la nature dynamique de la liste

p lejarre a écrit :


tu as alors  
 
typedef tligne_commande struct {
int codeproduit;  
double prix;
int qte;
 
// chainage vers la suivante
tligne_commande *pt_suivant;  
// retour vers le précédent;
tligne_commande *pt_précédent;  
// le premier
tligne_commande *pt_debut;
 
// chainage sur l'entete de la commande
// nomclient, date, codecommande.  
tentete_commande *pt_entete;
}

encore du mauvais C

p lejarre a écrit :


ca permet de faire des tableau de dimensions infinies ou plutot de dimensions non connues.

une lioste n'est pas un tableau.

Reply

Marsh Posté le 22-08-2004 à 13:50:14    

Non mais lol!!!
bon donc apparement ca devient plutot obligatoire avec les listes chainés, donc quand j y serai je les utiliserais!!!cool!


---------------
!jb!
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed