Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: aurquiel en 12 Noviembre 2016, 03:31 am



Título: C++ puntero a arreglo bidimensional parar imprimir contenido
Publicado por: aurquiel en 12 Noviembre 2016, 03:31 am
Hola estoy intentado imprimir en pantalla un arreglo 3x3 he investigado pero no me queda claro como declarar el apuntador a un arreglo bidimensional.


Código:
#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;

        }
    }

}


Título: Re: C++ puntero a arreglo bidimensional parar imprimir contenido
Publicado por: ivancea96 en 12 Noviembre 2016, 13:20 pm
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
  1. for (i=0;i<3;i++){
  2.    for(j=0;j<3;j++){
  3.        std::cout<<p[i][j]<<std::endl;
  4.    }
  5. }


Título: Re: C++ puntero a arreglo bidimensional parar imprimir contenido
Publicado por: 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.
 
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.


Título: Re: C++ puntero a arreglo bidimensional parar imprimir contenido
Publicado por: engel lex en 12 Noviembre 2016, 16:21 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...
(http://i.imgur.com/Te9zb7Q.png)


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
  1. void imprimir (int p[][3]);

opción 2:
lo haces realmente un puntero
Código
  1. int **arreglo;
  2. arreglo = new *int[3].;
  3. // todo lo que venga


Título: Re: C++ puntero a arreglo bidimensional parar imprimir contenido
Publicado por: aurquiel en 18 Noviembre 2016, 20:25 pm
Gracias si tenias razon ,muchas gracias por responder.