![]() |
![]() |
8.10) Arrays de Punteros.
|
Un array multidimensional puede ser expresado como un array
de punteros en lugar de como un puntero a un grupo contigupo de arrays.
En estos casos el nuevo array será de una dimensión menor
que el array multidimensional. Cada puntero indicará el principio
de un array de dimensión (n-1).
En términos generales, un array bidimensional puede
ser definido como un array unidimensional de punteros escribiendo.
![]() |
![]() |
en lugar de la definición convencional:
![]() |
![]() |
similar a esto un array ndimensional
puede ser definido como un array de punteros de dimensión (n-1)
escribiendo:
![]() |
![]() |
en lugar de:
![]() |
![]() |
en esta declaración:
NOTA IMPORTANTE: Notar que el nombre del array precedido por un asterisco no está encerrado entre paréntesis en este tipo de declaración. Es conveniente fijarse en las diferencias con las declaraciones hechas en el apartado anterior ( 8.9) Punteros y arrays multidimensionales.) La regla de precedencia de derecha a izquierda asocia primero el par de paréntesis cuadrados con array, definiéndolo como un array. El asterisco que lo precede establece que el array contendrá punteros.
tipo-dato es el tipo de datos de array n dimensional original. array es el nombre del array. expresión 1, expresión2,... son expresiones enteras positivas que indican el máximo número de elementos del array con cada índice.
Igualmente, se pierde la expresión
(expresión n)
más a la derecha de la definición, cuando definimos un array
de punteros. Mientras que la primera expresión
(expresión
1) más a la izquierda de la definición
se omite, cuando se define un puntero a un grupo de arrays
Ejemplo: Supongamos
que x es un array
bidimensional que posee 5 filas y 10 columnas, podemos definir x
como un array unidimensional de punteros escribiendo:
int *x [10];
en esta declaración:
Veamos todo esto más gráficamente:
x[0] apunta al primer elemento de la primera fila. x[1] apunta al primer elemento de la segunda fila. ............ ........... ............ ........... x[9] apunta al primer elemento de la novena fila.
Ejemplo: A continuación se muestra la reserva de una matriz bidimensional 3x3 con un array de punteros, en ella se realiza la reserva de memoria por filas, posteriormente asignamos valores consecutivos (a partir de 1) a cada una de las celdas.
Ejemplo: A continuación se muestra otro ejemplo en el que se realiza una reserva de memoria por filas, del array de punteros, y posteriormente, se pasa dicho array a una función, la cual se encargará de rellenarla de valores, para que finalmente sea devuelta al programa principal para que nos saque por pantalla dichos valores, que fueron introducidos en la función.