Passage par référence en C
roger
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
j'ai le petite code suivant en C:
#include <stdio.h>
int *cinq(){
int g=5;
return &g;
}
int main(){
int *p;
p=cinq();
printf("La valeur pointée par p est %d\n", *p);
return 0;
}
Normalement le programme est censé m'afficher la valeur pointée par p est 5, mais il ne le fait pas car g est une variable locale, quelqu'un saurait comment arranger ça svp? Je souhaiterais faire un passage par référence dans la fonction cinq, c'est faisable?
merci
j'ai le petite code suivant en C:
#include <stdio.h>
int *cinq(){
int g=5;
return &g;
}
int main(){
int *p;
p=cinq();
printf("La valeur pointée par p est %d\n", *p);
return 0;
}
Normalement le programme est censé m'afficher la valeur pointée par p est 5, mais il ne le fait pas car g est une variable locale, quelqu'un saurait comment arranger ça svp? Je souhaiterais faire un passage par référence dans la fonction cinq, c'est faisable?
merci
A voir également:
- Passage par référence en C
- Passage qwerty azerty - Guide
- Reference pto - Accueil - Box & Connexion Internet
- Test passage windows 11 - Guide
- Passage à windows 11 gratuit - Guide
- Passage windows 7 à 10 - Accueil - Mise à jour
5 réponses
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,
roger
un passage par argument, donc par pointeur fiddy...
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
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.
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.
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