Petite question sur les pointeurs deux étoiles qui se suivent [C] - C++ - Programmation
Marsh Posté le 20-10-2002 à 21:48:28
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...
Marsh Posté le 20-10-2002 à 21:56:17
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 :
|
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 :
|
Marsh Posté le 20-10-2002 à 22:04:15
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
Marsh Posté le 20-10-2002 à 22:10:37
c'est pas parce que ca tourne que c'est bon
Code :
|
Code :
|
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
Marsh Posté le 20-10-2002 à 22:29:37
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+
Marsh Posté le 20-10-2002 à 22:39:46
il faut juste que tu comprennes l'utilité du passage par pointeur et les 2 emplois des pointeurs
en clair
Code :
|
void foo(int **tab);
les 2 étoiles/niveau_d'_indirection n'ont pas la meme utilité icic
Marsh Posté le 20-10-2002 à 20:49:43
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.