Hola Antonio,<br><br><div class="gmail_quote">2011/7/2 Antonio Cascales <span dir="ltr"><<a href="mailto:antonio.cascales@gmail.com">antonio.cascales@gmail.com</a>></span><br><blockquote style="margin: 0px 0px 0px 0.8ex; padding-left: 1ex; border-left-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid;" class="gmail_quote">
<u></u>



<div style="padding-top: 15px; padding-right: 10px; padding-left: 10px;" name="Compose message area" bgcolor="#ffffff">
<div><font size="2" face="Arial">Hola a todos:</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">   Me llamo Antonio, y soy relativamente 
nuevo por la lista. Llevo tiempo  por aquí, con el fín de aprender a 
programar, pero pese a lo mucho que me gustaría entender todo lo que por aquí 
comentáis, soy incapaz de avanzar.</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">   ya le he pegado varios repasos al 
curso de C++ que tenéis por la web, pero debo de ser bastante poco inteligente, 
porque no logro entender determinados conceptos.</font></div>
<div><font size="2" face="Arial"></font> </div></div></blockquote><div> </div><div>No lo creo. A TODOS nos ha pasado, y especialmente el tema de los punteros, que incluso algunos veteranos se equivocan con ellos y tienden a detenerse más de la cuenta para estar seguros de lo que hacen.</div>
<div> </div><blockquote style="margin: 0px 0px 0px 0.8ex; padding-left: 1ex; border-left-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid;" class="gmail_quote"><div style="padding-top: 15px; padding-right: 10px; padding-left: 10px;" name="Compose message area" bgcolor="#ffffff">

<div><font size="2" face="Arial">   Es por eso que os escribo, para ver si 
alguien, bien sea con una explicación más clara, o con ejemplos concretos, me 
pudiese ayudar a entender qué son los punteros y los arrays. Y casi más lo 
primero que lo segundo, porque al menos, los arrays de 1 vector creo 
entenderlos. La utilidad y el funcionamiento de más de dos índices, ya se me 
escapa.</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font size="2" face="Arial">   ¿alguno podríais echarme una 
mano?</font></div>
<div> </div></div></blockquote><div> </div><div>Bueno, muchos te han ayudado, pero voy a aportar de mi parte.</div><div> </div><div>Como bien ha explicado Leonardo, un puntero es una variable que es capaz de guardar la dirección de memoria como su valor. Ahora bien, eso de por sí, no es muy práctico, por lo que nos interesa poder acceder a esa dirección de memoria guardada para leer y/o escribir el valor guardado en ella. Como C/C++ son lenguajes FUERTEMENTE tipificados, necesitamos indicar el tipo del dato apuntado. Por lo tanto, podemos decir que un puntero tiene dos tipos de datos: el suyo propio (el puntero) y el tipo del valor apuntado. Por ejemplo,</div>
<div> </div><div>int num = 10;</div><div>int *ptr = &num;</div><div> </div><div>Para el tema de los punteros, siempre es bueno mirar lo que hay en memoria. Para esto, usamos un "vector descriptor" que viene a ser una tabla de las características importantes de las variables en un programa. Por ejemplo, las definiciones anteriores serían así:</div>
<div> </div><div>Dirección de Memoria       Tipo de dato     Nombre      Valor</div><div>------------------------------------------------------------------------------------------</div><div>0x22AACC00                    int                     num            10</div>
<div>...</div><div><div>0x33DDEE00                                      int                     *                   ptr               0x22AACC00</div></div><div>...</div><div> </div><div>Las direcciones de memoria están en hexadecimal. Lo interesante de lo anterior es la asociación entre el valor del puntero, 'ptr', y la dirección de memoria del entero, 'num', que ambos son: 0x22AACC00. Así es como el puntero "apunta" a una variable: a través de su dirección de memoria.</div>
<div> </div><div>En cuanto a arrays de varias dimensiones, personalmente es mejor tratar estos casos como arrays de arrays de arrays de ... algún tipo de dato. Si lo prefieres, puedes decir que se trata de un grupo de un grupo de un grupo de ... algo. Desde luego, no son "dimensiones", sino más bien diferentes cantidades de grupos en cada grupo. Te pongo un ejemplo,</div>
<div> </div><div>int lista[12][5][30];</div><div> </div><div>Aquí, 'lista', es un array de 12 arrays de 5 arrays de 30 enteros. Si prefieres, nos extendemos un poco con la explicación: 'lista', es un array de 12 elementos, en que cada uno es un array de 5 elementos, en que cada uno es un array de 30 elementos, en que cada uno es un entero de tipo 'int'. Como dije antes, se trata de un grupo que contiene varios grupos, los cuales se constituyen de varios grupos, donde cada uno de ellos se comprende de varios grupos ... al final, habrá un grupo de un elemento básico.</div>
<div> </div><div>Podemos organizarnos con el código fuente, y usar 'typedef' para que te sea más fácil entender las cosas. Por ejemplo,</div><div> </div><div>typedef int lista_estudiantes[30];</div><div><div>typedef lista_estudiantes lista_clases[5];</div>
</div><div><div><div> </div><div>lista_clases asistencias[12];</div></div></div><div> </div><div>Así podemos guardar las asistencias de 30 estudiantes de cada una de las 5 clases de los 12 cursos (o años) que hay en total en un colegio. Podríamos continuar agregando más "dimensiones". Por ejemplo,</div>
<div> </div><div><div>typedef lista_clases lista_cursos[12];</div><div> </div><div>lista_cursos asistencias[10];</div></div><div> </div><div>Ahora 'asistencias' representa las asistencias de 30 estudiantes por cada clase de 5 por curso de 12 en 10 colegios de una ciudad. Agregando otra dimensión, para representar la cantidad de ciudades, obtendríamos,</div>
<div> </div><div><div><div>typedef lista_cursos lista_ciudades[10];</div><div> </div><div>lista_ciudades asistencias[500];</div></div></div><div> </div><div>Este array representa las asistencias por los 10 colegios por cada ciudad de las 500 que existen. En fin, podemos seguir agrupando grupos de grupos, pero creo que entiendes un poco más estos temas. Sin usar 'typedef' para organizarnos, acabaríamos por definir el siguiente array:<br>
</div><div><div>int asistencias[500][10][12][5][30];</div></div><div> </div><div>que sin saber qué significa cada "dimensión", terminaríamos con un dolor de cabeza para descifrar esto.</div><div> </div><div> </div>
<div>Espero que esto te aclare un poco los temas.</div><div> </div><div>Steven</div><div> </div></div>