PROBLEME AVEC LES PARAMETTRES D'UNE FONCTION en C

Fermé
jechmaki masudi Messages postés 19 Date d'inscription lundi 19 août 2013 Statut Membre Dernière intervention 22 septembre 2015 - 24 oct. 2013 à 20:24
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 - 24 oct. 2013 à 22:13
VOICI MON header:


#ifndef ECHANGE_H_INCLUDED
#define ECHANGE_H_INCLUDED

void echange(int a,int b);

#endif // ECHANGE_H_INCLUDED

et SON IMPLMENTATION EN .C

#include <stdio.h>
void echange(int a,int b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
}


en main j'ai

#include <stdio.h>

void main()
{
int nb1=12,nb2=3;
echange(nb1,nb2);
printf("%d",nb1);
printf("%d",nb1);
}

Apres compilation,j'ai toujours le meme resultat,donc:nb1=12 et nb2=3.

AIDEZ MOI SVP.

1 réponse

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
24 oct. 2013 à 22:13
Bonsoir, ça ne semble pas évident au premier abord mais en fait, ta fonction
echange
... ne fait rien.
J'explique: en C, tout est copié d'une fonction à l'autre. Tout. Que ce soit un
int
, un
unsigned byte
, un
struct
, ou même un pointeur (
void*
par exemple).
Donc quand tu appelles la fonction
echange(nb1,nb2)
, les paramètres nb1 et nb2 sont copiés et la fonction bénéficie de sa propre copie.
Pour pouvoir changer le contenu d'une variable, dans ce cas, il faut utiliser un pointeur, qui pointera vers la zone de la mémoire qui contient le contenu de la variable.
Ce qui donnera la fonction suivante:
void echange(int* a,int* b)
{
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
Qui donc se fera appeler comme ceci:
echange(&nb1,&nb2); 
C'est pas forcément façile à comprendre au début, et mes explications ne sont pas complètes; je te propose de lire la partie sur les pointeurs du tutoriel de C d'Openclassrooms.
1