Actualizar (int) la variable en C dentro de una función

Estoy tratando de escribir una función que cambie la pantalla en mi juego de serpiente C simple.

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

función:

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

Este código no actualiza el código, seguirá funcionando. ¿Qué está mal con mi código?

stage se pasa por valor a changeStage . stage = 1 solo cambia el valor local de stage en changeStage , no el valor de stage en main . Tienes que pasar un puntero en su lugar:

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

C es un lenguaje de paso por valor. El enfoque más sencillo para lograr lo que desea es pasar una referencia a la variable que necesita cambiar. Por ejemplo:

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

Nota: Es posible que deba leer los punteros para entender completamente el código si recién comienza con la progtwigción en C. En el código de ejemplo, en lugar de pasar el valor de ‘stage’, se pasa la ubicación donde se almacena el valor de ‘stage’. La función puede entonces modificar los contenidos en la ubicación.

Los argumentos de la función C son paso por valor. Esto significa que en lugar de pasar una referencia a la stage , está pasando el valor almacenado en ella. La actualización que realiza en la función changeStage solo se aplica a la copia que se ha realizado.

Si desea actualizar una variable en otra función, deberá pasarle un puntero.

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

&stage dice que debes tomar la dirección de stage y pasarla a la función. El argumento stage_p luego apuntará a la int en el main.

*stage_p hace que use el valor apuntado por stage_p , que es la stage principal en su caso.

Otras lecturas

No está modificando la variable de stage original, sino solo modificando una copia local dentro de la función changeStage .

Necesitas usar un puntero:

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

utilizando la función:

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

Necesitas aprender más conceptos básicos del lenguaje C. El puntero es una característica muy importante en el lenguaje C.

Correcto, debe pasar el puntero si desea cambiar el valor de la variable en main () o puede crearla como variable global, de esta forma es accesible tanto en funciones como en main.

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