Ici, j'ai une fonction nommée max(a,b)
pour obtenir le nombre maximum de deux. Et j'ai trouvé que la valeur de la variable a
y b
en utilisant printf()
sont différentes après avoir exécuté
printf("maxab()=%d after max: a=%d b=%d \n",max(a++,b++),a,b);
quand a
y b
sont Global variables
y Local variables
. Voici mon code :
#include<stdio.h>
int max(int a,int b)
{
if(a>b)
{
//printf("In func max():%d %d \n",a,b);
return a;
}
else {
//printf("In func max():%d %d \n",a,b);
return b;
}
}
void jubu_test(void)
{
int a=1;
int b=2;
printf("maxab()=%d after max: a=%d b=%d \n",max(a++,b++),a,b); //a=2,b=3
}
int c=2;
int d=1;
void quanju_test(void)
{
printf("maxcd()=%d c=%d d=%d \n",max(c++,d++),c,d); //c=2,d=1
c=2;
d=1;
int f=max(c++,d++);
printf("maxcd()=%d after max: c=%d d=%d \n",f,c,d); //c=3,d=2
}
int main(int argc, char** argv)
{
jubu_test();
quanju_test();
}
Le résultat que j'obtiens sur mon ordinateur est le suivant :
maxab()=2 after max: a=2 b=3
maxcd()=2 c=2 d=1
maxcd()=2 after max: c=3 d=2
Ma question est la suivante : Pourquoi dans la deuxième sortie a et b sont leurs valeurs originales et pourquoi la troisième sortie est a+1 et b+1 ? Pourquoi, lorsque a et b sont des variables globales, la valeur de a et b imprimée ne change que lorsque nous exécutons max(a++,b++)
première ? Pourquoi lorsque a et b sont des variables locales, cela n'a pas d'importance ?
Merci ! (utilisant gcc 5.3.0 sur Windows 10)