Questions sur les pointeurs

Fermé
jm22to67 Messages postés 5 Date d'inscription dimanche 29 août 2010 Statut Membre Dernière intervention 29 août 2010 - 29 août 2010 à 16:29
jm22to67 Messages postés 5 Date d'inscription dimanche 29 août 2010 Statut Membre Dernière intervention 29 août 2010 - 29 août 2010 à 22:53
Bonjour,

N'ayant pas programmé de puis plusieurs années, j'espère que mes questions ne vous paraîtront pas trop débiles!!!

1- Si je déclare un pointeur,

double *z;

que je l'alloue,

z = (double *)calloc(N, sizeof(double));

j'utilise ensuite ce pointeur comme argument d'une fonction,
res = ma_fonction(z);

avec,

double *ma_fonction(int *z)
{
...
while (z != NULL)
{
//instructions
}
}

Le problème c'est que la boucle While tourne en boucle et ne s'arrête jamais. J'en conclue donc que mon test d'arrêt n'est pas bon ou que j'alloue plus d'espace que je ne le pense?

2- Une fois que j'aurais réussi à parcourir mon pointeur jusqu'au bout, comme dois-je faire pour le faire pointer vers le premier élément?

Bien cordialement

7 réponses

dwyane346 Messages postés 147 Date d'inscription dimanche 11 janvier 2009 Statut Membre Dernière intervention 6 septembre 2012 18
29 août 2010 à 17:16
tu ne peut pas parcourir ta boucle comme sa;
tu dois sois donne une taille a ton z genre

int size = 5;


z = malloc(size * sizeof(double *));

puis pour parcourir

while (i < size)
{
i++;
}


oubien tu determine le dernier chiffre de ton pointeur genre z[size] = -1;
et tu parcour tant que tu ne trouve pas se chiffre
genre

while (z[i] != -1)
{
i++;
}
1
jm22to67 Messages postés 5 Date d'inscription dimanche 29 août 2010 Statut Membre Dernière intervention 29 août 2010 1
29 août 2010 à 17:43
Ou plutôt pour être exacte:


double *ma_fonction(double *z)
{
...
while (z != NULL)
{
//instructions
z++;
}
}
1
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
29 août 2010 à 20:22
z++ Je dois rêver...
Bien sûr qu'on peut l'écrire mais, sans contrôle, ça ne rime à rien! Et en plus il serait curieux de ne pas avoir des gros problèmes par la suite.
'z' est un pointeur, faire z++ c'est le faire pointer vers la case suivante et ... à un moment on va déborder du tableau, alors on pointera vers n'importe quoi !
Il faut donc contrôler; deux méthodes (voir le post de : dwyane346):
- soit faire avancer un index (qu'il faut donc passer à la fonction) et remplacer 'z' par 'z+index':
double *ma_fonction(double *z, int size)
{
  int i = 0;
  while (i < size)
  {
    //instructions en utilisant '*(z+index)' ou 'z[i]'
    i++;
  }
  return ...;
}
- soit terminer le tableau par une valeur particulière:
double *ma_fonction(double *z)
{
  while (*z != -1)
  {
    //instructions en utilisant '*z'
    z++;
  }
  return ...;
}
D'autre part ta fonction est déclarée comme retournant un pointeur vers un double.
Bonne continuation.
0
je ne comprend pas
dabord : double *z;
puis : double *ma_fonction(int *z)

z est soit int ou double
0
jm22to67 Messages postés 5 Date d'inscription dimanche 29 août 2010 Statut Membre Dernière intervention 29 août 2010 1
29 août 2010 à 17:15
Ha oui pardon c'est bien double

double *ma_fonction(double *z)
{
...
while (z != NULL)
{
//instructions
}
}

mais ce n'est pas là qu'est le problème car dans le vrai programme je ne me suis pas trompé!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dwyane346 Messages postés 147 Date d'inscription dimanche 11 janvier 2009 Statut Membre Dernière intervention 6 septembre 2012 18
29 août 2010 à 17:22
au faite si tu as une boucle infini c est plutot normal car tu ne fai pas bouge la position du pointeur

while ( )
{

*z++; // pour le faire avancer
}
0
jm22to67 Messages postés 5 Date d'inscription dimanche 29 août 2010 Statut Membre Dernière intervention 29 août 2010 1
29 août 2010 à 17:35
Ben en fait si je l'incrémente bien sauf que je fait plutôt

double *ma_fonction(double *z)
{
...
while (z != NULL)
{
//instructions
z++
}
}

Mais bon apparemment (d'après dwyane346) c'est pas comme ça que l'on parcours un pointeur donc c'est certainement là que j'ai fair une erreur!!!

sinon pour la deuxième question comme dois-je faire pour faire pointer mon pointeur sur le premier élément de z une fois que je l'ai incrémenté une ou plusieurs fois?


En tout cas merci pour vos réponses!!!
0
jm22to67 Messages postés 5 Date d'inscription dimanche 29 août 2010 Statut Membre Dernière intervention 29 août 2010 1
29 août 2010 à 22:53
merci pour ta réponse, cela répond de manière très claire à ce qui me posais problème... je pensais que le pointeur se suffisait à lui même mais en fait il faut contrôler avec un autre paramètre.
Maintenant mon programme fonctionne, et la fonction retourne bien un pointeur vers double...

Merci pour ces réponses
0