C++ puntero a arreglo bidimensional parar imprimir contenido

Iniciado por aurquiel, 12 Noviembre 2016, 03:31 AM

0 Miembros y 1 Visitante están viendo este tema.

aurquiel

Hola estoy intentado imprimir en pantalla un arreglo 3x3 he investigado pero no me queda claro como declarar el apuntador a un arreglo bidimensional.



#include <iostream>

void imprimir (float **p);

int main(){

   srand (time(NULL));

   int arreglo[3][3]={1,2,3,
                      4,5,6,
                      7,8,9};

   imprimir(arreglo);

}

void imprimir (float **p){

   int i=0,j=0;

   for (i=0;i<4;i++){
       for(j=0;j<4;j++){
       std::cout<<p[i][j]<<std::endl;

       }
   }

}

ivancea96

El for no es de 0 a 3 (0,1,2,3 -> 4 elementos), sinó de 0 a 2 (0,1,2 -> 3 elementos):
Código (cpp) [Seleccionar]
for (i=0;i<3;i++){
    for(j=0;j<3;j++){
        std::cout<<p[i][j]<<std::endl;
    }
}

aurquiel

En los ciclos cada quien los hace a su manera mi condicional es que sea menor que tres asi que esta bien.

0,1,2

Lo que me preocupa es el arreglo bidimensional quisiera manejarlo con punteros necesito pasarlo a una función y me gustaría hacerlo por transferencia.

engel lex

Cita de: aurquiel en 12 Noviembre 2016, 15:56 PM
En los ciclos cada quien los hace a su manera mi condicional es que sea menor que tres asi que esta bien.

what??? no... si tienes menos de X elementos no es como tu quieras... es menos de x elementos... lo tenías mal...



sobre el codigo...

tienes la declaración mal... si son int, son int, si son float, son float... pero no ambas (y no cada quien no lo hace a su manera, es como el compilador lo acepte y siguiendo los standards)

int arreglo[3][3] no es un puntero a un espacio de memoria abierto... es un puntero a secciones fijas de 3 espacios (en la segunda dimensión) el es equivalente a int [][3]

para pasarlo como parámetro tienes 2 opciones...

opcion 1:
cambias la declaración de la función para que acepte punteros a secciones de 3 espacios de memoria continuos...
Código (cpp) [Seleccionar]
void imprimir (int p[][3]);

opción 2:
lo haces realmente un puntero
Código (cpp) [Seleccionar]
int **arreglo;
arreglo = new *int[3].;
// todo lo que venga
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

aurquiel

Gracias si tenias razon ,muchas gracias por responder.