[C con Clase] Arrays multidimensionales como parametros de una funcion

Javier Sánchez antydesk en ad-inet.org
Sab Mayo 19 01:18:07 CEST 2007


No se hace asi... los arrays dinamicos los haras haciendo reserva de
memoria o bien con malloc en c o new en c++... a las funciones pasales un
punero al array (direccion de memoria) donde se quedara apuntando al
primer elemento de este...

luego accedes normalmente a los datos de este desde el puntero....

la verdad ara no tengo muchas ganas de ponerme es escribir codigo... si
aun lo necesitas abisa por la lista y te pongo como se hace...

Un saludo, AntyDesk



Steven Davidson escribió:
> Hola Rafael,
>
> El pasado 2007-05-15 17:37:13, Rafa escribió:
>
> R> Hola a todos,
> R> me gustaría saber si alguien puede echarme una mano con lo siguiente:
> R> quiero pasar una serie de arrays multidimensionales de dimensión
> R> variable como parámetros de una función para multiplicar matrices,
> R> calcular potencias de una matriz, etc., pero no se como hacerlo, ya que
> R> tengo que poner la dimensión del array al declarar la función. Si
> R> alguien sabe como solventar este problema por favor, me conteste lo
> R> antes posible.
>
> Efectivamente, si usas arrays estáticos multidimensionales, el compilador
> obviamente te pide información acerca de todas las dimensiones menos la
> primera que no es necesaria. Esto es porque el compilador necesita esta
> información para llevar a cabo ciertos cálculos si se intenta acceder a
> elementos de tal array. Tienes dos opciones, si quieres aceptar un array
> multidimensional:
>
> 1. Recibir un array de una sola dimensión al igual que los parámetros que
> indiquen las dimensiones. Esto implica que tendrás que hacer esos cálculos
> del compilador explícitamente para poder acceder al elemento que quieras.
> Por ejemplo,
>
> void func( int lista[], unsigned n, unsigned m, unsigned l )
> {
>   ...
>   unsigned nIndice = 20*m*l + 10*l + 5;  // Acceder: lista[20][10][5]
>
>   lista[nIndice]++;
>   ...
> }
>
> Esto significa que tendremos que pasar nuestro array multidimensional como
> un array unidimensional. Por ejemplo,
>
> int main()
> {
>   int MiLista[400][200][300];
>   ...
>   func( MiLista[0][0], 400, 200, 300 );
>   ...
> }
>
> 2. Recibir una estructura la cual contiene un array multidimensional. Por
> ejemplo,
>
> struct stArray
> {
>   int lista[400][200][300];
> };
>
> void func( stArray &ref, unsigned n, unsigned m, unsigned l )
> {
>   ...
>   ref.lista[20][10][5]++;
>   ...
> }
>
> También podríamos haber incluido las dimensiones en la estructura. Por
> ejemplo,
>
> struct stArray
> {
>   int lista[400][200][300];
>   unsigned n, m, l;
> };
>
> void func( stArray &ref )
> {
>   ...
>   ref.lista[20][10][5]++;
>   ...
> }
>
>
> Otra manera es usar arrays dinámicos, por lo que tendrás que manejar
> punteros a punteros. Por ejemplo,
>
> void func( int ***pLista, unsigned n, unsigned m, unsigned l )
> {
>   ...
>   plista[20][10][5]++;
>   ...
> }
>
> El engorro está en la creación y liberación dinámica de la memoria para
> poder guardar la información en el array dinámico.
>
>
> Espero que esto te sirva.
>
> Steven
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>


Un saludo, Javier Sánchez (AntyDesk)
------------------------------------
Web: http://www.ad-inet.org
Email personal: antydesk en ad-inet.org
Email trabajo: info en ad-inet.org
------------------------------------
"Realmente, no estoy tratando de destruir a Microsoft. Ese será tan solo
un efecto colateral no intencionado."
Linus Torvalds (2003)

Hay 10 tipos de personas en este mundo, las que saben de binario y las que
no.

En que grupo estas tu?

------------------------------------
Linux Users nº 445830.







Más información sobre la lista de distribución Cconclase