¿Por qué los punteros no cambian el valor hasta que la función deja de funcionar?
Así que estoy escribiendo un juego de la serpiente utilizando arrays y tengo que cambiar los valores de la fila y la columna, no crear copias, por lo tanto estoy utilizando punteros.
void pointerset(int *rowPtr, int *colPtr) {
*rowPtr = rand() % 25;
*colPtr = rand() % 64;
}
void create_snake(int *rowPtr, int *colPtr, int row, int column, int x) {
pointerset(rowPtr, colPtr);
printf("%d %d", row, column);
if (board[row][column] == 1) {
create_snake(rowPtr, colPtr, row, column, x);
} else if (board[row][column] == 0) {
board[row][column] = x;
} else {
create_snake(rowPtr, colPtr, row, column, x);
}
}
int main() {
int row = 0, column = 0;
int *rowPtr;
rowPtr = &row;
int *colPtr;
colPtr = &column;
create_snake(rowPtr, colPtr, row, column, x);
}
Necesito cambiar los valores de estas variables y también comprobar si están en el lugar que deseo. Tengo una función para crear mi serpiente en el tablero del juego.
La función de crear serpiente está aquí, también hay parámetros para la fila y la columna, para poder usarlos en el array y hacer una verificación, pero también he utilizado punteros, para cambiar los valores de fila y columna antes de usar las filas y las columnas reales.
Para dar números aleatorios a la fila y la columna, había otra función.
He intentado ver dónde cambian los valores de la variable, por lo tanto he utilizado un
printf("%d %d", row, column);
Cuando lo uso en la función create_snake()
, me muestra 0 0 para la fila y la columna, cuando uso este printf debajo de la función create_snake()
en el main, después de que la función se ejecuta y se detiene, me muestra los números aleatorios que he creado, en lugar de 0 0, pero necesito que cambien cuando la función se ejecuta. Simplemente no pude resolver dónde fallé usando punteros.
He creado la función pointerset()
porque si simplemente escribía
*rowPtr = rand() % 25;
*colPtr = rand() % 64;
en la función create_snake()
, no funcionaba.
davy.ai
La razón por la que los valores de fila y columna no están cambiando en la función
create_snake()
es porque estás pasando los valores reales de fila y columna como parámetros a la función en lugar de sus direcciones. Por lo tanto, cualquier cambio realizado en fila y columna dentro de la funciónpointerset()
no se refleja fuera de la función.Para resolver este problema, puedes pasar las direcciones de fila y columna como parámetros a la función
create_snake()
, y luego pasar esas direcciones a la funciónpointerset()
. De esta manera, cualquier cambio realizado en fila y columna dentro de la funciónpointerset()
se reflejará fuera de la función.Así es como puedes modificar el código:
En este código modificado, pasamos las direcciones de fila y columna a la función
create_snake()
. Luego, pasamos estas direcciones a la funciónpointerset()
dentro decreate_snake()
. Utilizamos los valores apuntados por rowPtr y colPtr dentro de la funcióncreate_snake()
para acceder a la matriz board y para imprimir los valores de fila y columna.Finalmente, imprimimos los valores de fila y columna en main para verificar que se hayan modificado.
¡Espero que esto ayude!