TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: JElab en 13 de Julio de 2006, 04:28:51

Título: punteros y arrays bidimensionales
Publicado por: JElab en 13 de Julio de 2006, 04:28:51
ola a todos!!!
existe diferencia entre la utilizacion de punteros con arrays unidimensionales y bidimensionales?? yo tengo el siguiente trozo de codigo en mi programa:

#pragma udata menm_tabla
usigned char tabla[100][12];
#pragma udata
void main(void)
{
.......
unsigned char *puntero;
puntero=&tabla[0];
puntero[10][6]=0x00;// esto si que se puede hacer con arrays unidimensionales no??? a mi por lo menos no me da errores pero con esto me da el siguiente error.
Error [1129] [] operator requires a pointer and an integer as operands

yo lo que quiero es pasar en un momento determinado una de las filas que compone la tabla a otra funcion y en ella poderme mover por las columnas o campos por los que esta compuesta dicha fila.tambien he leido que por el echo de haber modificado los bancos de memoria(con el fin de que entre toda la tabla en un unico espacio de memoria y no me suceda ningun error, de ahi los pragmas) para inicializar el array bidimensional tengo que hacer uso de un puntero, es cierto??? si es asi como seria??


 
Título: Re: punteros y arrays bidimensionales
Publicado por: maunix en 13 de Julio de 2006, 08:32:17
#pragma udata menm_tabla
usigned char tabla[100][12];
#pragma udata
void main(void)
{
.......
unsigned char *puntero;
puntero=&tabla[0];
puntero[10][6]=0x00;// esto si que se puede hacer con arrays unidimensionales no??? a mi por lo menos no me da errores pero con esto me da el siguiente error.
Error [1129] [] operator requires a pointer and an integer as operands

Estas en un error. 

Tu variable puntero solo puede ser usado como un puntero char, no como un array.  El que es un vector o array es 'tabla'.

Puedes hacer tabla[100][6] = 0x00 , pero hacer eso con puntero sencillamente no tiene sentido.

No recuerdo bien, como ordena en memoria el C los arrays bidimensionales.  Por lo cual el dato al que quieres apuntar estaría en la Fila 10, Columna 6 ó bien Fila 6, Columna 10.

*puntero =  (12*6)+6; 

ó bien

*puntero =  10 + (100*6) 


El puntero saltará "char" veces, hasta ubicarse en el lugar indicado.

Para el puntero, la matriz son 100*12 = 1200 bytes consecutivos, no los toma como un array en la forma que tu lo quieres codificar.


Espero haber sido claro

Saludos