[C con Clase] Duda sobre acceso a array multidimensional con punteros

mikel en campusdeportivo.com mikel en campusdeportivo.com
Jue Ago 30 14:14:55 CEST 2012


Hola

Me llamo Mikel y os escribo porque he encontrado un artículo en 
vuestra web, http://c.conclase.net/curso/?cap=015b,  me ha sido útil 
para poder pasar arrays multidimensionales en una función.

EL problema viene al intentar acceder a los elementos del array cuando 
hago uso de la fuuncion. YO tengo el siguiente codigo:

Mi declaración de la función:

//Le paso el numero de frames del dibujo: numframesparametro
//este parametro tambien lo utilizaremos como tamaño par el array 
test_frame_size
//LE paso un array que contiene el numero de puntos de cada frame: 
test_frame_size []
// Le paso otro array que tiene todods los puntos del dibujo. Es de 3 
dimensiones, [numero de frames][num max de puntos a dibujar en un 
frame][datos de cada punto coordenadas, blankin y colores]

int pintar (int numframesparametro, int test_frame_size [],int 
*test_frame, int indice_maxptsframe, int indice_datospunto);


Cuando la llamo hago lo siguiente:

int test_frame_ws [7][302][6]
numFrames=7;
int test_frame_size_ws[numFrames] = {300,301,293,281,280,287,292};

pintar(numFrames, test_frame_size_ws,(int*)test_frame_ws,302,6);


El problema viene dentro de la función al intentar acceder a una 
posición concreta de ese array multidimensional. En vuestro articulo 
definis una formula que no acabo de entender.

a[p+o*P+m*O*P+n*M*O*P] o también a[p+P*(n+m+o)+O*(m+n)+M*n].

Y en el ejemplo practico no entiendo como la aplicáis, ya que hacéis 
par un array de 4 dimensiones, para acceder a ala posicion 
tabla[3][4][12][15] usáis  tabla[3*m*o*p+4*o*p+12*p+15], por lo que yo 
entiendo que de forma generica seria par ami array de 3 dimensiones 
seria:

miarray [N][M][O] y quiero acceder a la posición miaray[n][m][o], saco 
la formula a[N*m+o+M*o+O], esto me devuelve posiciones que no son las 
que quiero.

Espero que podáis ayudarme.

Gracias de antemano

Mikel









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