C : passage de pointeur en parametre
Fermé
remibarbier
Messages postés
237
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
30 mai 2013
-
19 déc. 2009 à 18:41
remibarbier Messages postés 237 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 30 mai 2013 - 19 déc. 2009 à 22:54
remibarbier Messages postés 237 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 30 mai 2013 - 19 déc. 2009 à 22:54
7 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
19 déc. 2009 à 19:16
19 déc. 2009 à 19:16
Salut,
Lorsque tu affiches tes variables, tu affiches en fait les adresses des pointeurs.
Il faut donc rajouter des étoiles devant. Cela va aller pointer sur l'adresse mémoire. De plus quand tu affiches des double, il faut utiliser juste f et non lf.
Et enfin n'oublie pas de mettre return 0; avant la fin de ton accolade finale.
A moins d'être en C99...
Cdlt
Lorsque tu affiches tes variables, tu affiches en fait les adresses des pointeurs.
Il faut donc rajouter des étoiles devant. Cela va aller pointer sur l'adresse mémoire. De plus quand tu affiches des double, il faut utiliser juste f et non lf.
printf("%f",*conductivite); printf("%f",*masse_vol);
Et enfin n'oublie pas de mettre return 0; avant la fin de ton accolade finale.
A moins d'être en C99...
Cdlt
Salut,
Ta fonction a comme paramètres deux pointeurs.
Alors il faut passer en argument les adresses de deux variables.
Compilation et résultat
Ta fonction a comme paramètres deux pointeurs.
Alors il faut passer en argument les adresses de deux variables.
#include<stdio.h> #include<stdlib.h> void variable(double *conductivite,double *masse_vol) { printf("quelle conductivite : "); scanf("%lf",conductivite); printf("quelle masse molaire : "); scanf("%lf",masse_vol); } int main() { double conductivite; double masse_vol; variable(&conductivite,&masse_vol); printf("%f ",conductivite); printf("%f\n",masse_vol); return 0; }
Compilation et résultat
lami20j@debian:~$ gcc -Wall a.c lami20j@debian:~$ ./a.out quelle conductivite : 10 quelle masse molaire : 20 10.000000 20.000000 lami20j@debian:~$
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 841
19 déc. 2009 à 21:46
19 déc. 2009 à 21:46
Salut,
Si tu veux utiliser les pointeurs, faut réaliser de l'allocation.
Voici un exemple :
Et j'insiste bien, il faut utiliser printf("%f") et non printf("%lf"). Pour le scanf par contre, il faut laisser bien évidemment scanf("%lf").
Si tu veux utiliser les pointeurs, faut réaliser de l'allocation.
Voici un exemple :
#include <stdio.h> #include <stdlib.h> void variable(double *conductivite, double *masse_vol) { printf("quelle conductivite : "); scanf("%lf",conductivite); printf("quelle masse molaire : "); scanf("%lf",masse_vol); } int main(void) { double *conductivite; double *masse_vol; conductivite=malloc(sizeof (double)); masse_vol=malloc(sizeof (double)); if(conductivite==NULL || masse_vol==NULL) { fputs("erreur d'allocation\n",stderr); return EXIT_FAILURE; } variable(conductivite,masse_vol); printf("%f",*conductivite); printf("%f\n",*masse_vol); free(conductivite),conductivite=NULL; free(masse_vol),masse_vol=NULL; return 0; }
Et j'insiste bien, il faut utiliser printf("%f") et non printf("%lf"). Pour le scanf par contre, il faut laisser bien évidemment scanf("%lf").
Dora The Explorer
Messages postés
2811
Date d'inscription
mardi 4 septembre 2007
Statut
Contributeur
Dernière intervention
1 septembre 2011
853
19 déc. 2009 à 19:35
19 déc. 2009 à 19:35
Salut !
Si je ne dis pas de connerie...:
Un pointeur, comme son nom l'indique, permet de pointer sur une autre variable. Le pointeur en lui même contient une adresse de variable.
Il faudrait donc créer deux variables, et deux pointeurs qui pointent sur ces variables, c'est-à-dire qui contiennent l'adresse de ces variables.
Ensuite tu fais comme tu as déjà fait, tu envoies les pointeurs à la fonction, etc. Sauf pour l'affichage comme l'a dit fiddy.
Si je ne dis pas de connerie...:
Un pointeur, comme son nom l'indique, permet de pointer sur une autre variable. Le pointeur en lui même contient une adresse de variable.
Il faudrait donc créer deux variables, et deux pointeurs qui pointent sur ces variables, c'est-à-dire qui contiennent l'adresse de ces variables.
Ensuite tu fais comme tu as déjà fait, tu envoies les pointeurs à la fonction, etc. Sauf pour l'affichage comme l'a dit fiddy.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
remibarbier
Messages postés
237
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
30 mai 2013
16
19 déc. 2009 à 20:34
19 déc. 2009 à 20:34
RE
pourtant quand je compile avec gcc j'ai ce problème :
(en rectifiant comme vous avez dit)
gcc eau1.c -lm -o eau1
eau1.c: In function ‘variable’:
eau1.c:9: attention : format ‘%f’ expects type ‘float *’, but argument 2 has type ‘int’
eau1.c:11: attention : format ‘%f’ expects type ‘float *’, but argument 2 has type ‘int’
eau1.c: In function ‘main’:
eau1.c:31: attention : passing argument 1 of ‘variable’ from incompatible pointer type
eau1.c:31: attention : passing argument 2 of ‘variable’ from incompatible pointer type
pourtant quand je compile avec gcc j'ai ce problème :
(en rectifiant comme vous avez dit)
gcc eau1.c -lm -o eau1
eau1.c: In function ‘variable’:
eau1.c:9: attention : format ‘%f’ expects type ‘float *’, but argument 2 has type ‘int’
eau1.c:11: attention : format ‘%f’ expects type ‘float *’, but argument 2 has type ‘int’
eau1.c: In function ‘main’:
eau1.c:31: attention : passing argument 1 of ‘variable’ from incompatible pointer type
eau1.c:31: attention : passing argument 2 of ‘variable’ from incompatible pointer type
remibarbier
Messages postés
237
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
30 mai 2013
16
19 déc. 2009 à 20:49
19 déc. 2009 à 20:49
Cela marche merci beaucoup lami20j,
j'ai bien %lf car %f ne fonctionne pas.
Et si je commencer le main avec :
int main()
{
double *conductivite;
N'y aurrait-il pas moyen que ça marche quand même ?
j'ai bien %lf car %f ne fonctionne pas.
Et si je commencer le main avec :
int main()
{
double *conductivite;
N'y aurrait-il pas moyen que ça marche quand même ?
remibarbier
Messages postés
237
Date d'inscription
lundi 21 avril 2008
Statut
Membre
Dernière intervention
30 mai 2013
16
19 déc. 2009 à 22:54
19 déc. 2009 à 22:54
RE,
Génial, merci c'est exactement ce qui me fallait pour bien comprendre !
merci beaucoup
Génial, merci c'est exactement ce qui me fallait pour bien comprendre !
merci beaucoup