Pointeurs

Nykkoo Messages postés 2 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 11 octobre 2003 - 11 oct. 2003 à 19:26
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 - 11 oct. 2003 à 20:52
Salut,

Etant debutant dans la programmation en C, j'arrive aux chapitres des pointeurs (sniff) et je me trouve confonté aux problemes suivants :

double ** pointeur;
est ce que cela signifie qu'un pointeur de type quelconque pointe sur un pointeur de type double?
quel en est l'interet?

ensuite je trouve :

void swap(double ** Val1, double**Val2)

peut on m'expliquer ce que cela signifie?
que vont recevoir les arguments de la fonction?
Merci d'avance
Nykoo

4 réponses

cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
11 oct. 2003 à 19:39
double **pp

est un pointeur sur un pointeur sur un double.
le premier pointeur est "un pointeur sur double"
le second est "un pointeur sur pointeur"

En fait normalement ce n'est pas cet exemple que l'on prend, on n'utilise pas le pointeur sur pointeur.

swap(int *a,int *b)
{
int tmp; // temporaire
tmp = *a;
*a = *b;
*b = tmp;
}

voila un fonction utilisant les pointeurs. Et voila ton main :

int main(...)
{
...

// on suppose que c=10 et d=21
swap(&c,&d);
// maintenant c=21 et d=10

...
}

Cela marche que grace aux pointeurs
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
11 oct. 2003 à 19:46
0
Nykkoo Messages postés 2 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 11 octobre 2003
11 oct. 2003 à 20:22
Re,

Merci pour ta aide.
Pour echanger des valeurs je pense avoir compris, cependant dans ce cas c'est un echange d'adresse, je te joins le prog au cas ou. La ou je bute, c'est le pointeur du pointeur...dans la fonction swap et dans l'init. Si tu as 30s pour m'eclairer merci bcp.

#include <stdio.h>
#include <stdlib.h>

void swapAdr (double ** pVal1, double ** pVal2);

int main()
{
double pi = 3.14;
double e = 2.7128;
double ** adpi;
double ** ade;
adpi = π
ade = &e;

printf ("avant : \n pi vaut %lf a l'adresse 0x%x \n e vaut %lf a l'adresse 0x%x \n", pi,*adpi,e ,*ade);
swapAdr(&adpi,&ade);

printf ("apres : \n pi vaut %lf a l'adresse 0x%x \n e vaut %lf a l'adresse 0x%x \n", pi,*adpi,e ,*ade);
return 0;

}

void swapAdr (double ** pVal1,double ** pVal2)

{

double * inter;

inter = *pVal1;
*pVal1 = * pVal2;
* pVal2= inter;

return ;
}
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
11 oct. 2003 à 20:52
C'est le meme principe :

Apres adpi est un pointeur sur le pointeur qui POINTAIT sur e
et reciproquement
Apres adpe est un pointeur sur le pointeur qui POINTAIT sur pi

ppPi -> pPi -> Pi //
ppE -> pE -> E // les -> representes les pointeurs

Apres coup :

ppPi -> pE ->E
ppE -> pPi -> Pi

Effectivement cela n'a pas un grand interet ici. Mais les pointeur sont PRIMORDIAL en langage C, c'est le plus important, c'est tellement puissant.
0
Rejoignez-nous