Questions sur les pointeurs
jm22to67
Messages postés
5
Statut
Membre
-
jm22to67 Messages postés 5 Statut Membre -
jm22to67 Messages postés 5 Statut Membre -
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
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
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++;
}
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++;
}
Ou plutôt pour être exacte:
double *ma_fonction(double *z)
{
...
while (z != NULL)
{
//instructions
z++;
}
}
double *ma_fonction(double *z)
{
...
while (z != NULL)
{
//instructions
z++;
}
}
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':
Bonne continuation.
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.
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é!
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é!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
}
while ( )
{
*z++; // pour le faire avancer
}
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!!!
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!!!
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
Maintenant mon programme fonctionne, et la fonction retourne bien un pointeur vers double...
Merci pour ces réponses