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;
}
}
}
El for no es de 0 a 3 (0,1,2,3 -> 4 elementos), sinó de 0 a 2 (0,1,2 -> 3 elementos):
for (i=0;i<3;i++){
for(j=0;j<3;j++){
std::cout<<p[i][j]<<std::endl;
}
}
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.
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...
(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...
void imprimir (int p[][3]);
opción 2:
lo haces realmente un puntero
int **arreglo;
arreglo = new *int[3].;
// todo lo que venga
Gracias si tenias razon ,muchas gracias por responder.