Mise à jour (int) variable en C dans une fonction

J’essaie d’écrire une fonction qui change d’écran dans mon jeu simple C Snake.

main(){ int stage = 0; ... .. . while(stage!=0){ //if snake hits wall changeStage(stage); } } 

une fonction:

 void changeStage(int stage){ stage = 1; } 

Ce code ne met pas à jour le code, il continuera à fonctionner. Quel est le problème avec mon code?

stage est passé par valeur à changeStage . stage = 1 modifie uniquement la valeur locale de stage dans changeStage , pas la valeur de stage dans main . Vous devez passer un pointeur à la place:

 while (stage != 0) { changeStage(&stage); } void changeStage(int *stage) { *stage = 1; } 

C est une langue de passe par valeur. L’approche la plus simple pour accomplir ce que vous voulez est de passer une référence à la variable que vous devez changer. Par exemple:

 void changeStage(int *stage){ *stage = 1; } main(){ int score = 0; int stage = 0; ... .. . while(stage!=0){ //if snake hits wall changeStage(&stage); } } 

Remarque: vous devrez peut-être lire les pointeurs pour bien comprendre le code si vous commencez juste avec la programmation en C. Dans l’exemple de code, au lieu de transmettre la valeur de ‘stage’, vous transmettez l’emplacement où la valeur de ‘stage’ est stockée. La fonction peut alors modifier le contenu de l’emplacement.

Les arguments de la fonction C sont transmis valeur par valeur. Cela signifie qu’au lieu de transmettre une référence à stage vous transmettez la valeur qui y est stockée. La mise à jour que vous effectuez dans la fonction in changeStage ne s’applique alors qu’à la copie réalisée.

Si vous souhaitez mettre à jour une variable dans une autre fonction, vous devez lui passer un pointeur.

 void changeStage(int* stage_p){ *stage_p = 1; } int main() { //... while(stage!=0){ //if snake hits wall changeStage(&stage); } } 

&stage dit de prendre l’adresse de stage et de la transmettre à la fonction. L’argument stage_p va alors pointer vers l’int.

*stage_p fait utiliser la valeur indiquée par stage_p , qui est stage dans votre cas.

Lectures complémentaires

Vous ne modifiez pas la variable d’ stage origine, vous ne changeStage que modifier une copie locale dans la fonction changeStage .

Vous devez utiliser un pointeur:

 void changeStage(int* stage) { *stage = 1; } 

en utilisant la fonction:

 while (stage != 0) { // if snake hits wall changeStage(&stage); } 

Vous devez apprendre plus de concepts de base du langage C. Le pointeur est une caractéristique très importante du langage C.

Correct, vous devez passer le pointeur si vous souhaitez modifier la valeur de la variable dans main () ou vous pouvez la créer en tant que variable globale, de cette façon, elle est accessible dans les fonctions et dans la main.

 static int stage = 0; void changeStage(){ stage = 1; } main(){ int score = 0; ... .. . while(stage!=0){ //if snake hits wall changeStage(); } }