[C con Clase] Puntero a Array
Marving
jr.marving en gmail.com
Jue Abr 3 15:29:53 CEST 2014
El pasado 2014-04-01 18:00:41, Steven Davidson escribió:
SD> Hola Marving,
SD> 2014-04-01 11:59 GMT-04:00 Marving <jr.marving en gmail.com>:
SD> > Soy nuevo en esto de c++. Tratando de conseguir algo de confianza con los
SD> > punteros, tropezé con la preferencia entre * y [] y de ahí surgió.
SD> >
SD> > int (*ptr0) [5];
SD> >
SD> > Parece ser que esto es Puntero a un array de 5 entero
SD> >
SD> Correcto.
SD> Pero no entiendo el concepto.
SD> > En el siguiente programa si intento apuntar a un array de 5 enteros como es
SD> > int array[5] con ptr0 de este modo
SD> > int (*ptr0) [5] = array;
SD> > obtengo
SD> > cannot convert 'int*' to 'int (*)[5]' in initialization
SD> >
SD> >
SD> Obviamente los tipos no concuerdan.
SD> Intenta hacer esto:
SD> int tabla[10][5];
SD> int (*pa)[5] = tabla;
SD> Te puede venir bien a la hora de pasar arrays 2D a una función; por ejemplo,
SD> void func( int (*pa)[5] );
SD> ...
SD> func( tabla );
SD> Sinceramente, esto no es algo que se suele hacer en la práctica, pero como
SD> ejercicio viene bien para entender los punteros y los arrays.
SD> Espero que esto te aclare las dudas.
SD> Steven
SD> _______________________________________________
SD> Lista de correo Cconclase Cconclase en listas.conclase.net
SD> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
SD> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
Hola Steven
Gracias por tu rápida respuesta.
La verdad es que no se aclararon mis dudas. Pero no te preocupes no fue debido
a tu explicación. No comprendía nada de tu contestación, ayer.
Entendía la arrays de dos dimensiones, pero no manejaba los punteros para este tipo de arrays.
Partiendo de esto
int vector[4];
int array_2D[3][4]
A veces asociaba la idea de vector, como puntero de arrays de 5 enteros.
Seguidamente, array_2D, era para mi un puntero a un array de dos dimensiones.
Parece ser que estaba equivocado.
Lo cierto parece ser que es
vector es simplemente un puntero a un entero. Apunta a los elementos del array
array_2D es un puntero a arrays unidimensionales de 4 elementos
array_2D[3][4] son 3 arrays unidimensionales de 4 elementos
Y si el programa este es correcto. Creo que ya habré captado la idea.
No se hasta cuando,... espero por lo menos hasta el final del día.
int vector[4] = {10,20,30,40};
int matriz_2D[3][4] =
{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9,10,11,12}
};
// vector es puntero constante de tipo --entero--
// vector apunta vector[0]
int* ptr = vector; // ptr = &vector[0]
cout << ptr << " ";
ptr = &vector[0];
cout << ptr << " \n";
for (int i = 0; i < 4; i++)
{
cout << *(ptr + i) << " ";
}
cout << "\n---------------\n";
// matriz_2D [3][4] son 3 array unidimensionales de 4 elementos
// matriz_2D es un puntero constante de tipo --vector 4 elementos enteros--
// matriz_2D apunta a un vector de 4 elementos
// matriz_2D apunta a matriz_2D[0]
int (*ptr_v)[4] = matriz_2D; // ptr_v = &matriz_2D[0]
cout << ptr_v << " ";
ptr_v = &matriz_2D[0];
cout << ptr_v << " ";
cout << &matriz_2D[0][0] <<"\n";
cout << "-------------\n";
for (int i = 0; i < 3; i++)
{
// Apunta a vectores
// ptr_v + i -- &matriz_2D[0]--&matriz_2D[1]--&matriz_2D[2]
// Apunta a elementos del vector
// *(ptr_v + i) -- Direccion de los elementos del vector
ptr = *(ptr_v + i);
for (int j = 0; j < 4; j++)
{
cout << *(ptr + j) << " ";
}
cout << "\n";
}
cout << "----------------------Directamente---------------------\n";
ptr_v = matriz_2D;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
cout << *(*(ptr_v + i) + j) << " ";
cout << "\n";
}
Saludos
Más información sobre la lista de distribución Cconclase