C : passage de pointeur en parametre
remibarbier
Messages postés
259
Statut
Membre
-
remibarbier Messages postés 259 Statut Membre -
remibarbier Messages postés 259 Statut Membre -
Bonjour,
comment modifieriez vous le code C ci-dessous pour qui marche : c'est pour comprendre le passage de pointeur en paramètre que j'ai du mal à comprendre, cardans le "return" on peut mettre qu'une chose
ps : on ma dit que "scanf" et "printf" c'est pas top, il y a bien "fgets" mais apparemment ca marche que pour les "char" comment ferriez vous ?
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.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("%lf",conductivite);
printf("%lf",masse_vol);
}
merci
comment modifieriez vous le code C ci-dessous pour qui marche : c'est pour comprendre le passage de pointeur en paramètre que j'ai du mal à comprendre, cardans le "return" on peut mettre qu'une chose
ps : on ma dit que "scanf" et "printf" c'est pas top, il y a bien "fgets" mais apparemment ca marche que pour les "char" comment ferriez vous ?
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.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("%lf",conductivite);
printf("%lf",masse_vol);
}
merci
7 réponses
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:~$
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").
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
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