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

  FORUM HardWare.fr
  Programmation
  C++

  [C] Petite question sur les pointeurs deux étoiles qui se suivent

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Petite question sur les pointeurs deux étoiles qui se suivent

n°231440
Eniac
Da Mourfis' King
Posté le 20-10-2002 à 20:49:43  profilanswer
 

Salut,
 
J'ai un peu de mal à comprendre ce bout de programme...
Il sert à échanger deux tableaux, je capte pas les deux étoiles du passage en rouge.
 
Ce qui me tracasse surtout, c'est qu'en mettant une seule étoile, deux, trois ou 36, ça marche aussi bien...
 
Idem si on appelle Echange(p1, p2, DIM); sans mettre l'opérateur &  :??:  
 
Grand merci A+ (désolé si ma question est stupide...)
 
void Echange (int * tabla[ ], int ** tablb, int dim);
void Afficher (int tabl[ ], int dim);
 
 
/* Echange des adresses des 1ers éléments des tableaux */
void Echange (int * tabla[ ], int **tablb, int dim){
int * temp;
temp=*tabla;
*tabla=*tablb;
*tablb=temp;
}
 
void Afficher (int tabl[ ], int dim){
int i;
for (i=0;i<dim;i++) printf("tabl[%d]=%d ", i, tabl[i]);
printf("\n" );
}
 
 
main() {
int tab1[DIM]={1,2,3,4,5};
int tab2[DIM]={5,4,3,2,1};
int * p1 = tab1; int * p2 = tab2;
Afficher(p1, DIM); Afficher(p2, DIM);
Echange(&p1, &p2, DIM);Afficher(p1, DIM); Afficher(p2, DIM);
return 0;
}


---------------
If you really want something, all the Universe conspires in helping you to achieve it.
mood
Publicité
Posté le 20-10-2002 à 20:49:43  profilanswer
 

n°231474
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 20-10-2002 à 21:45:30  profilanswer
 

les pointeurs de pointeurs sont pour des tableaux a 2 dimensions ou si on veut modifier le pointeur d'un tableau


---------------
du bon usage de rand [C] / [C++]
n°231479
Eniac
Da Mourfis' King
Posté le 20-10-2002 à 21:48:28  profilanswer
 

ALors ça serait plutôt le deuxième cas.
 
tu pourrais pas être un peu plus explicite stp ?
clairement ca fait quoi ?
 
ça fait une demi heure que je me prend la tête sur ça...


---------------
If you really want something, all the Universe conspires in helping you to achieve it.
n°231481
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 20-10-2002 à 21:56:17  profilanswer
 

ce que tu veux c'est juste permuter les premiers éléments de 2 tableaux
 
genre tab1[0]==3 et tab2[0]==5
puis  tab1[0]==5 et tab2[0]==3
 
il y a une certaine equivalence pointeur/tableau.
 
retiens qu'un pointeur est juste une adresse vers le premier élément d'une série d'éléments contigus de meme type
 

Code :
  1. void swap1st(int *t1, int *t2) // <=> int t1[], int t2[]
  2. {
  3.   int tmp=*t1; // <=> t1[0]
  4.   *t1=*t2;
  5.   *t1=tmp;
  6. }
  7. swap(tab1, tab2);


 
les pointeurs s'utilise dans 2 cas: pour les tableaux ou pour modifier un paramètre.
 
si tab est un int[], tab n'est pas modifiable
si tab_pt est un int* , il est modifiable comme n'importe quelle variable
 

Code :
  1. void bond(int **t)
  2. (
  3.   *t++;
  4. }
  5. int tab[10];
  6. int *p=tab; // p==&tab <=> p==&tab[0]
  7. bond(&p); // p==&tab[1]



---------------
du bon usage de rand [C] / [C++]
n°231487
Eniac
Da Mourfis' King
Posté le 20-10-2002 à 22:04:15  profilanswer
 

oui, ça, OK
 
pour moi *qqch = ce qui se trouve à l'adresse contenue dans la variable qqch
 
donc quand on dit **tablb, on place dans tablb l'adresse de p2 (&p2) c'est bien ça ?
 
idem avec *tabla[], on place dans tabla &p1
 
après la permutation avec tabla, tablb et temp, j'ai  
tabla qui contient &p2
tablb qui contient &p1
...
 
ce qui m'avance pas, puisque moi je veux dire que p1 pointe sur tab2 et p2 pointe sur tab1  :??:  
 
 
et ce qui me tracasse aussi c'est que le programme tourne aussi quand on met une étoile dans le prototype/en-tête, donc je me dis que 2 étoiles c'est superflu...
et on peut aussi en mettre 50 de suite, y'a un warning, mais ça tourne
 
 :??:


---------------
If you really want something, all the Universe conspires in helping you to achieve it.
n°231491
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 20-10-2002 à 22:10:37  profilanswer
 

c'est pas parce que ca tourne que c'est bon
 

Code :
  1. void pointer_swap(type **p1, type **p2)
  2. {
  3.   type *tmp=*p1;
  4.   *p1=*p2;
  5.   *p2=tmp;
  6. }


 

Code :
  1. pointer_swap(&ptr1, &ptr2);


on passe les paramètres par adresse afin de pouvoir les modifié icic
 
p1 contient l'adresse de ptr1
*p1 contient ptr1
**ptr1 contient le contenu de ptr1
 
faudrait faire un dessin je crois


---------------
du bon usage de rand [C] / [C++]
n°231512
Eniac
Da Mourfis' King
Posté le 20-10-2002 à 22:29:37  profilanswer
 

arf, j'ai tellement réflechi sur mon schéma que ça ressemble à une grosse tâche d'encre :)
 
je crois que j'ai fait +/- tilt, mais j'ai cours demain et je demanderai des renseignements à ce moment là.  Par messages interposés c'est pas l'idéal...
 
merci beaucoup pour ton aide, bonne soirée A+


---------------
If you really want something, all the Universe conspires in helping you to achieve it.
n°231520
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 20-10-2002 à 22:39:46  profilanswer
 

il faut juste que tu comprennes l'utilité du passage par pointeur et les 2 emplois des pointeurs
 
en clair
 

Code :
  1. void foo(int **tab);
  2. int tablo[XXX];
  3. foo(&tablo);


 
void foo(int **tab);
 
les 2 étoiles/niveau_d'_indirection n'ont pas la meme utilité icic


---------------
du bon usage de rand [C] / [C++]

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

  [C] Petite question sur les pointeurs deux étoiles qui se suivent

 

Sujets relatifs
petite question sur les classesQuestion d'ordre générale sur vieux os
Question bete en C comme je deteste ce langage de merde[SQL SERVER] Un petite question !
[C] - Question sur strstr()Question pour les pros du batch sous windows (nt/2000)
[PHP] Question aux utlisateurs de phpBB (ver. 2.0.3) [Newbie][PRO*C] Question a 2 euros balles
Plus de sujets relatifs à : [C] Petite question sur les pointeurs deux étoiles qui se suivent


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