Autor Tema: punteros y arrays bidimensionales  (Leído 2797 veces)

0 Usuarios y 1 Visitante están viendo este tema.

JElab

  • Visitante
punteros y arrays bidimensionales
« 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??


 
« Última modificación: 13 de Julio de 2006, 05:07:45 por JElab »

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: punteros y arrays bidimensionales
« Respuesta #1 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
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)