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.

accediendo a los elementos en un puntero en 2D que apunta a un array dinámico en C++

<h1>include <iostream></h1>

<p>using namespace std;</p>

<p>void create(int** mapa);</p>

<p>int main() {
    int** mapa;
    create(mapa);
    cout << endl << "imprimiendo mapa en main" << endl;
    for (int i = 0; i < x; i++) {
        for (int j = 0; j < y; j++) {
            mapa[i][j] = 1;
            cout << mapa[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}</p>

<p>void create(int** mapa) {
    int x = 8, y = 8;</p>

<pre><code>mapa = new int* [x];

for (int i = 0; i < x; i++) {
    mapa[i] = new int[y];
}
for (int i = 0; i < x; i++) {
    for (int j = 0; j < y; j++) {
        mapa[i][j] = 1;
        cout << mapa[i][j] << " ";
    }
    cout << endl;
}
</code></pre>

<p>}

He estado intentando leer los elementos de un puntero 2D que apunta a un arreglo dinámico en la función principal, pero no parece funcionar, he intentado leerlo usando bucles dobles y ((mapa + i) + j) pero sin éxito.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema en el código dado es que el puntero 2D map no se pasa por referencia a la función create. Por lo tanto, los cambios realizados en map dentro de la función create no se reflejan en el puntero map en la función main.

    Para solucionar esto, podemos pasar el puntero 2D por referencia a la función create. Esto se puede hacer cambiando la firma de la función a void create(int**& map).

    Además, las variables x e y no están definidas en la función main. Necesitamos definirlas antes de usarlas en el bucle para imprimir los elementos de map.

    Aquí está el código corregido:

    “`c++
    #include

    using namespace std;

    void create(int**& map);

    int main() {
    int** map;
    create(map);
    cout << endl << “printing map in main” << endl;
    int x = 8, y = 8;
    for (int i = 0; i < x; i++) {
    for (int j = 0; j < y; j++) {
    cout << map[i][j] << ” “;
    }
    cout << endl;
    }
    return 0;
    }

    void create(int**& map) {
    int x = 8, y = 8;

    map = new int*[x];
    
    for (int i = 0; i < x; i++) {
        map[i] = new int[y];
    }
    for (int i = 0; i < x; i++) {
        for (int j = 0; j < y; j++) { 
            map[i][j] = 1;
            cout << map[i][j] << " ";
        }
        cout << endl;
    }
    

    }
    “`

    Ahora, cuando ejecutemos este programa, deberíamos ver los elementos de map impresos correctamente en la función main después de que hayan sido inicializados en la función create.

Comments are closed.