PROBLEME AVEC LES PARAMETTRES D'UNE FONCTION en C

jechmaki masudi Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   -  
ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   -
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 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
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