es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  , ,

Answer

  1. Avatar for 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ón pointerset() 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ón pointerset(). De esta manera, cualquier cambio realizado en fila y columna dentro de la función pointerset() se reflejará fuera de la función.

    Así es como puedes modificar el código:

    void pointerset(int *rowPtr,int *colPtr){
        *rowPtr=rand()%25;
        *colPtr=rand()%64;
    }
    
    void create_snake(int *rowPtr,int *colPtr,int x){
    
        pointerset(rowPtr,colPtr);
    
        int row = *rowPtr;
        int column = *colPtr;
    
        printf("%d %d\n",row,column);
    
        if(board[row][column]==1){
            create_snake(rowPtr,colPtr,x);
        }else if(board[row][column]==0){
            board[row][column]=x;
        }else{
            create_snake(rowPtr,colPtr,x);
        }
    }
    
    int main(){
    
        int row=0,column=0;
    
        int *rowPtr = &row;
        int *colPtr = &column;
    
        create_snake(rowPtr,colPtr,x);
    
        printf("%d %d",row,column);
    
        return 0;
    }
    
    

    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ón pointerset() dentro de create_snake(). Utilizamos los valores apuntados por rowPtr y colPtr dentro de la función create_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!

Comments are closed.