A Propos des passages de paramètre...

A Propos des passages de paramètre... - C - Programmation

Marsh Posté le 21-09-2003 à 17:42:00    

Pourquoi dans le prototype de certaines fonctions, on met un pointeur de pointeur du style ci-dessous, tout ça pour passer un pointeur ??  
 
Ne pourrait-on pas simplifier cela en passant un pointeur en paramètre à un autre pointeur ???
 

Code :
  1. void fonction(liste **p);


liste est un typedef : typedef struct list list;
Element à passer en paramètre : liste *l;

Reply

Marsh Posté le 21-09-2003 à 17:42:00   

Reply

Marsh Posté le 21-09-2003 à 17:51:41    

comment tu ferais pour :
 - passer un pointeur sur un pointeur ?
 - passer en paramètre un « tableau » de pointeurs ?
 
 
sauf cas précis, chachez la nature pointeuresque d'un type, surtout si on dispose de struct machin, c'est à dire définir pmachin, c'est très laid, on ne compte plus les débutants perdus ...

Reply

Marsh Posté le 21-09-2003 à 18:43:51    

Taz a écrit :

comment tu ferais pour :
 - passer un pointeur sur un pointeur ?
 - passer en paramètre un « tableau » de pointeurs ?
 
 
sauf cas précis, chachez la nature pointeuresque d'un type, surtout si on dispose de struct machin, c'est à dire définir pmachin, c'est très laid, on ne compte plus les débutants perdus ...


 
Est que ceci est un exemple de cas Précis ou l'on peut passer "un pointeur sur un pointeur" ?

Code :
  1. void swap(int *a,int *b);
  2. void main()
  3. {
  4. int a,b,*pa,*pb;
  5. a=3,b=5;
  6. pa=&a;
  7. pb=&b;
  8. swap(pa,pb);
  9. }
  10. void swap(int *x,int *y)
  11. {
  12. int *temp;
  13. *temp=*x;
  14. *x=*y;
  15. *y=*temp;
  16. }

Reply

Marsh Posté le 21-09-2003 à 18:49:15    

ou tu vois un pointeur sur un pointeur ?

Reply

Marsh Posté le 21-09-2003 à 19:04:01    

Taz a écrit :

ou tu vois un pointeur sur un pointeur ?


 
Eh bien...Dans le main(), tu as les pointeurs *pa et *pb, et dans les paramètres de la fonction, tu as int *x et int *y.
 
Donc tu passes par exemple l'adresse ou pointe pa dans le pointeur x c'est pas ça le résonnement ?
 
N.B : donc je passe bien un pointeur dans un pointeur,non ?


Message édité par neo9205 le 21-09-2003 à 19:04:52
Reply

Marsh Posté le 21-09-2003 à 19:07:01    

ben non.là, je suis pas payé, mais ce que je disais à mes étudiants. on peut dire qu'un pointeur est un type comme un autre et par un artifice d'écriture
 
la synthaxe
 
<type> * identificateur;
 
 
donc
 
char** tab;
->
char* * tab;
-> pointeur de char*
-> char * * tab;
-> pointeur de pointeur de char

Reply

Marsh Posté le 21-09-2003 à 19:59:25    

neo9205 a écrit :


 

Code :
  1. void swap(int *x,int *y)
  2. {
  3. int *temp;
  4. *temp=*x;
  5. *x=*y;
  6. *y=*temp;
  7. }




 
void swap(int *x, int *y)
{
  int temp = *x;
  *x = *y;
  *y = temp;
}

Reply

Marsh Posté le 21-09-2003 à 20:00:50    

Taz a écrit :

ben non.là, je suis pas payé, mais ce que je disais à mes étudiants. on peut dire qu'un pointeur est un type comme un autre et par un artifice d'écriture
 
la synthaxe
 
<type> * identificateur;
 
 
donc
 
char** tab;
->
char* * tab;
-> pointeur de char*
-> char * * tab;
-> pointeur de pointeur de char
 


Je ne comprend pas ce que tu cherches à m'expliquer... :heink:  

Reply

Marsh Posté le 21-09-2003 à 20:03:26    

SomeBugsInMe a écrit :


 
void swap(int *x, int *y)
{
  int temp = *x;
  *x = *y;
  *y = temp;
}
 


 
Ca change pas grand chose au résultat...

Reply

Marsh Posté le 21-09-2003 à 20:04:22    

neo9205 a écrit :


 
Ca change pas grand chose au résultat...

:heink: ben l'un plante, l'autre fait bien la permutation

Reply

Marsh Posté le 21-09-2003 à 20:04:22   

Reply

Marsh Posté le 21-09-2003 à 20:08:12    

Taz a écrit :

:heink: ben l'un plante, l'autre fait bien la permutation


 
Justement non ça marche sans probleme dans les 2 cas


Message édité par neo9205 le 21-09-2003 à 20:08:53
Reply

Marsh Posté le 21-09-2003 à 20:08:55    

neo9205 a écrit :


 
Justement non ça marche sans probleme dans les 2 cas

on parie combien ?

Reply

Marsh Posté le 21-09-2003 à 20:11:51    

Taz a écrit :

on parie combien ?


 
Je viens d'essayer les 2 cas et la permutation est correcte,sans plantage  :D  
C'est peut etre car je suis sous Windobe avec visual C :??:


Message édité par neo9205 le 21-09-2003 à 20:12:14
Reply

Marsh Posté le 21-09-2003 à 20:12:27    

Taz a écrit :

on parie combien ?

[:quoted]

Reply

Marsh Posté le 21-09-2003 à 20:51:43    

Code :
  1. int *temp;
  2.     *temp=*x;


 
Ya rien qui te gêne là, avant de te faire plumer ?
 
Si le bug vient pas à toi, va à lui :
 

Code :
  1. int *temp=NULL;
  2.     *temp=*x;


Message édité par leneuf22 le 21-09-2003 à 20:54:48
Reply

Marsh Posté le 21-09-2003 à 20:53:26    

l'UB a des fois bon dos

Reply

Marsh Posté le 21-09-2003 à 21:39:03    

leneuf22 a écrit :

Code :
  1. int *temp;
  2.     *temp=*x;


 
Ya rien qui te gêne là, avant de te faire plumer ?
 
Si le bug vient pas à toi, va à lui :
 

Code :
  1. int *temp=NULL;
  2.     *temp=*x;




 
Tu as raison, il faut prendre le taureau par les cornes et c'est ce que je vais essayer de faire   :jap:

Reply

Sujets relatifs:

Leave a Replay

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