Pourquoi ma fonction ne modifie pas les variables
Résolu
nizarkhalloufi
Messages postés
11
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
je suis debutant et j'ai beusoin d'aide. J'ai ecris une fonction permettant de calculer le pgcd de deux nombres de deux façons differentes, l'une d'elles que j'ai jugé fausse est la suivante :
#include <stdio.h>
#include <stdlib.h>
long pgcd(long a, long b)
{
long t=0;
if(a > b)
{
while (b != 0)
{
t = b;
b = a%b;
a = t;
}
return a;
}
else
{
while (a != 0)
{
t = a;
a = b%a;
b = t;
}
return b;
}
}
int main(int argc, char *argv[])
{
long a=120, b=45, nombre = 0;
nombre = pgcd(a,b);
printf("pgcd = %ld , a = %ld , b = %ld\n", nombre,a,b);
system("PAUSE");
return 0;
}
code console :
pgcd = 15, a= 120, b = 45
normalement la fonction pgcd modifie les valeurs de a et b mais ce n'est pas le cas, je veux savoir pourquoi.
Merci de me repondre.
je suis debutant et j'ai beusoin d'aide. J'ai ecris une fonction permettant de calculer le pgcd de deux nombres de deux façons differentes, l'une d'elles que j'ai jugé fausse est la suivante :
#include <stdio.h>
#include <stdlib.h>
long pgcd(long a, long b)
{
long t=0;
if(a > b)
{
while (b != 0)
{
t = b;
b = a%b;
a = t;
}
return a;
}
else
{
while (a != 0)
{
t = a;
a = b%a;
b = t;
}
return b;
}
}
int main(int argc, char *argv[])
{
long a=120, b=45, nombre = 0;
nombre = pgcd(a,b);
printf("pgcd = %ld , a = %ld , b = %ld\n", nombre,a,b);
system("PAUSE");
return 0;
}
code console :
pgcd = 15, a= 120, b = 45
normalement la fonction pgcd modifie les valeurs de a et b mais ce n'est pas le cas, je veux savoir pourquoi.
Merci de me repondre.
A voir également:
- Pourquoi ma fonction ne modifie pas les variables
- Fonction si et - Guide
- Fonction miroir - Guide
- Comment voir les modifications sur word - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
2 réponses
la fonction pgcd modifie les valeurs de a et b
Non, une fonction en C ne modifie JAMAIS ses paramètres, car elle n'a pas les 'vrais' paramètres mais seulement des copies, et elle ne modifie que ces copies.
Si on veut modifier des variables, il faut passer leurs adresses : c'est le rôle des pointeurs, si tu en as entendu parler.
Non, une fonction en C ne modifie JAMAIS ses paramètres, car elle n'a pas les 'vrais' paramètres mais seulement des copies, et elle ne modifie que ces copies.
Si on veut modifier des variables, il faut passer leurs adresses : c'est le rôle des pointeurs, si tu en as entendu parler.
Justement, ta fonction ne modifie pas les valeurs des variables GLOBALES a et b.
Tu utilises a et b comme noms de paramètres de ta fonction.
C'est la valeur des paramètres sur la pile d'appel qui sont modifiés.
De toute manière ce n'est pas une bonne pratique d'utiliser des noms de variables globale en paramètre de fonctions...
Johan
Tu utilises a et b comme noms de paramètres de ta fonction.
C'est la valeur des paramètres sur la pile d'appel qui sont modifiés.
De toute manière ce n'est pas une bonne pratique d'utiliser des noms de variables globale en paramètre de fonctions...
Johan
Pour empêcher de modifier la chaîne pointée par x (en fait on peut quand même, mais il faut le faire exprès)
Mais avec ou sans const, le pointeur que tu as passé dans la fonction appelante ne sera pas modifié (la zone pointée pourra l'être, elle)