La mise à jour d'une variable globale dans C
J'ai un débutant C question. Je veux dans le code ci-dessous...
include <stdio.h>
void iprint();
int i=0;
int main()
{
int j;
for (j=0; j<50; j++)
{
iprint(i);
printf("%d\n",i);
}
}
void iprint(i)
{
i +=1;
//printf("%d\n",i);
}
... la fonction "iprint" pour mettre à jour la valeur de i chaque heure est-il appelé, par exemple, la mise à jour je, de sorte qu'il peut être utilisé dans la main avec la valeur 1 pour l'itération 2, et 3 pour l'itération 2, etc.
Je l'ai accompli en modifiant le code de cette fonction:
include <stdio.h>
int iprint();
int i=0;
int main()
{
int j;
for (j=0; j<50; j++)
{
i= iprint(i);
printf("%d\n",i);
}
}
int iprint(i)
{
i +=1;
//printf("%d\n",i);
return(i);
}
Dois-je retourner(i) pour le faire? La raison de la demande, c'est que si j'ai beaucoup de fonctions à l'aide de je, c'est un peu ennuyeux d'avoir à passer entre eux. Si vous au lieu, en quelque sorte, j'ai pu mettre à jour comme la mise à jour d'une variable globale dans matlab, ce serait sympa. Est-il possible?
- C'est possible, mais pas forcément une bonne idée...
- Ce n'est même pas syntaxiquement correct. Est-ce à compiler? (pour ne pas mentionner l'utilisation de variables globales est généralement une mauvaise odeur )
- Il suffit de supprimer l'argument de iprint.
- double possible de les Pointeurs en C et comment passer des variables locales que les pointeurs
Vous devez vous connecter pour publier un commentaire.
Utiliser un pointeur sur la variable globale. Modifier la valeur du pointeur. C'est ça
Le problème avec la première, c'est que vous passez la variable comme argument de la fonction, de sorte que lorsque la fonction modifie la variable c'est seulement la modification de sa propre copie locale et non pas la variable globale. C'est la variable locale
i
ombres la variable globalei
.De ne pas mentionner que vous n'avez pas réellement déclarer l'argument correctement, de sorte que votre programme ne devrait même pas compiler.
i
, par exemplevoid iprint( int *i ) { *i += 1 }
et de l'appel deiprint( &i );
.Vous n'avez pas besoin de passer des variables globales en tant que paramètres.
Si vous déclarez un paramètre ou d'une variable locale avec le même nom que la variable globale vous masquer la variable globale.
vous pourriez avoir augmenté la valeur de i dans la fonction principale elle-même.
Par le moyen de changer la fonction de
la déclaration
Cela se passe comme cela parce que vous êtes de passage de la valeur de la fonction par le "passage par valeur" la méthode le cas où une copie de la variable est faite. Lorsque vous incrémenter la valeur que je iprint méthode de copie de la variable globale i est incrémenté. Variable globale reste intacte.
Devez essayer ce code