Passage par référence en C
Fermé
roger
-
21 déc. 2009 à 21:49
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 21 déc. 2009 à 23:52
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 21 déc. 2009 à 23:52
A voir également:
- Passage par référence en C
- Reference pto - Accueil - Box & Connexion Internet
- Passage qwerty azerty - Guide
- Le compte reference est actuellement verrouillé - Forum DNS
- Passage windows 7 à 10 - Accueil - Mise à jour
- Excel en-tête référence cellule ✓ - Forum Excel
5 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
21 déc. 2009 à 22:16
21 déc. 2009 à 22:16
Salut,
Déjà en C, il n'y a pas de passage par référence. Les références sont un concept purement C++.
Tu veux donc un vrai passage par référence en C++ ou un simple passage par pointeur ?
Cdlt,
Déjà en C, il n'y a pas de passage par référence. Les références sont un concept purement C++.
Tu veux donc un vrai passage par référence en C++ ou un simple passage par pointeur ?
Cdlt,
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
148
21 déc. 2009 à 21:58
21 déc. 2009 à 21:58
Un exemple court:
void cinq(int* p) { *p = 5; } int main(void) { int* p = malloc(sizeof(int)); cinq(p); printf("La valeur pointée par p est %d\n", *p); return 0; }Bonne continuation.
Salut,
lami20j@debian:~/trash/AB$ cat a.c #include <stdio.h> int *cinq(){ int a=5; int *g=&a; return g; } int main(){ int *p=cinq(); printf("La valeur pointée par p est %d\n", *p); return 0; } lami20j@debian:~/trash/AB$ gcc -Wall a.c lami20j@debian:~/trash/AB$ ./a.out La valeur pointée par p est 5
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
148
21 déc. 2009 à 22:16
21 déc. 2009 à 22:16
Pour une fois je ne suis pas d'accord avec toi.
Que la fonction retourne '&a' ou 'g', cela ne change rien; il est retourné l'adresse d'une variable locale qui n'aura plus aucun sens une fois la fonction terminée.
Il faut trouver autre chose, par exemple:
Que la fonction retourne '&a' ou 'g', cela ne change rien; il est retourné l'adresse d'une variable locale qui n'aura plus aucun sens une fois la fonction terminée.
Il faut trouver autre chose, par exemple:
void cinq(int* p) { *p = 5; } int main(void) { int p; cinq(&p); printf("La valeur pointée par p est %d\n", p); return 0; }Bonne soirée.
roger
>
loupius
Messages postés
697
Date d'inscription
dimanche 1 novembre 2009
Statut
Membre
Dernière intervention
31 décembre 2017
21 déc. 2009 à 22:19
21 déc. 2009 à 22:19
loupius je dois garder la déclaration de int *p dans le main et ensuite p=...
en fait dans le p= je dois mettre l'adresse d'une variable tu es d'accord?
Donc la fonction cinq() doit renvoyer l'adresse d'une variable...
en fait dans le p= je dois mettre l'adresse d'une variable tu es d'accord?
Donc la fonction cinq() doit renvoyer l'adresse d'une variable...
Re,
Si je ne me trompe pas, tu ne sais pas ce que tu veux.
J'ai pris ton exemple et je l'ai modifié pour que ça marche, c'est tout.
Si tu veux un passage par adresse alors ta fonction doit contenir des paramètres (des pointeurs).
Ta fonction int *cinq() retourne un pointeur *int mais il n'y a pas des paramètres.
Si je ne me trompe pas, tu ne sais pas ce que tu veux.
J'ai pris ton exemple et je l'ai modifié pour que ça marche, c'est tout.
Si tu veux un passage par adresse alors ta fonction doit contenir des paramètres (des pointeurs).
Ta fonction int *cinq() retourne un pointeur *int mais il n'y a pas des paramètres.
marven23
Messages postés
71
Date d'inscription
samedi 11 juillet 2009
Statut
Membre
Dernière intervention
20 août 2013
2
21 déc. 2009 à 22:25
21 déc. 2009 à 22:25
Bon soir,
Primo ton premier exemple est juste et il tourne : il affiche 5
Secondo, on parle du passage par réference que dans les arguments d'une fonction, mais dans ton exemple ceci n'est que le type de retour de la fonction qui est int*
Voici un exemple avec un passage par référence
#include <stdio.h>
void cinq(int * g){
*g=5; //On accède en ecriture pour modifier la valeur pointée par g
}
int main(){
int p;
cinq(&p); //On passe la réference &p : adresse de p comme l'exemple célebre scanf(...,&p)
printf("La valeur pointée par p est %d\n",p);
return 0;
}
Dans cet exemple on passe une réference sur p pour que la fonction puisse modifier sa valeur
@+
Primo ton premier exemple est juste et il tourne : il affiche 5
Secondo, on parle du passage par réference que dans les arguments d'une fonction, mais dans ton exemple ceci n'est que le type de retour de la fonction qui est int*
Voici un exemple avec un passage par référence
#include <stdio.h>
void cinq(int * g){
*g=5; //On accède en ecriture pour modifier la valeur pointée par g
}
int main(){
int p;
cinq(&p); //On passe la réference &p : adresse de p comme l'exemple célebre scanf(...,&p)
printf("La valeur pointée par p est %d\n",p);
return 0;
}
Dans cet exemple on passe une réference sur p pour que la fonction puisse modifier sa valeur
@+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
21 déc. 2009 à 22:33
21 déc. 2009 à 22:33
Salut,
Il existe le mot-clé static.
Très moche, mais bon si c'est ce que tu veux ^^.
Il existe le mot-clé static.
Très moche, mais bon si c'est ce que tu veux ^^.
#include <stdio.h> int *cinq(){ static int g=5; return &g; } int main(){ int *p; p=cinq(); printf("La valeur pointée par p est %d\n", *p); return 0; }
21 déc. 2009 à 22:20