Procédure en c
Résolu
giovedy
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
voila je suis complètement débutant en C et j'aimerai m'entraîner à utiliser une procédure. Le problème est que je m'attends à voir apparaître la valeur 9 et 10, alors que j'obtiens la valeur 4 et 5. Pourquoi ?
Merci !
Voici le petit programme :
void plus(int c,int d)
{
c=c+d;
d=d+5;
}
void main (void)
{
int a=4;
int c=5;
plus(a,c);
printf("%d,%d\n",a,c);
}
voila je suis complètement débutant en C et j'aimerai m'entraîner à utiliser une procédure. Le problème est que je m'attends à voir apparaître la valeur 9 et 10, alors que j'obtiens la valeur 4 et 5. Pourquoi ?
Merci !
Voici le petit programme :
void plus(int c,int d)
{
c=c+d;
d=d+5;
}
void main (void)
{
int a=4;
int c=5;
plus(a,c);
printf("%d,%d\n",a,c);
}
4 réponses
-
Les variables sont passées par copie, du coup c et d valent bien 9 et 10 à la fin de la procédure plus, mais la modification n'est pas répercutée sur les valeurs de a et c du main.
Il faut utiliser un & pour pouvoir faire un passage par variable : void plus(int &c, int &d) La confiance n'exclut pas le contrôle-
-
-
-
Autant pour moi, je me suis (encore) mélangé les pinceaux avec le C++
Du coup, il y a peut-être plus simple que le code qui suit mais je ne sais plus trop :
#include "stdio.h" void plus(int *c,int *d) { (*c) = (*c)+(*d); (*d) = (*d)+ 5; } void main () { int a=4; int b=5; plus(&a,&b); printf("%d,%d\n",a,b); } -
-
-
déja utiliser la mémoire c dans deux endroits pour des utilisations différentes, c'est MAL
-
-
KX Oo
bien sur que SI
la seul exception étant le i de la boucle for (et encore, c'est mieux si on peut faire autrement)
C'est la regle numéro 1 en programation
chaque variable est unique, et explicite.
c'est encore plus important qu'un code commenté.
dans un programme de 10 lignes avec une procédure, c'est peut-etre pas important, quand tu devras dépanner un programme de 10 000 lignes avec des centaines de procédures et fonctions, et que ce n'est pas toi qui l'a fait... ou pire, c'est toi qui l'a fait, mais y'a 10 ans...
tu comprendras... -
Toi tu parlais de "la mémoire c" or ce n'est pas la même mémoire, vu que ce sont deux variables différentes, l'une est locale au main, l'autre en paramètre de fonctions. Il n'y a pas d'ambiguïté.
Effectivement on peut critiquer le fait d'utiliser deux fois le même nom, ou encore d'utiliser un nom avec une seule lettre... Mais dans ce genre de programmes on ne va pas chipoter !
Le message a été effacé, mais tout à l'heure quelqu'un proposait d'utiliser une variable globale à la place du c local au main, et là ça aurait été vraiment mal !!!
Mais bon, de toute façon ce n'était pas le problème, qui est résolu maintenant...
-
-
pourquoi utiliser une procédure, c'est d'une fonction dont tu as besoin..
-
les variables C et D sont locales.