Ejercicio 4 - Estructura a implementar

Ejercicio 4 - Estructura a implementar

de Daniel Ezequiel Diniz Figueredo -
Número de respuestas: 2

Buenas.

Tengo ciertas dudas en cuanto a como proceder con este ejercicio. 
La primera viene dada por no saber realmente que es lo que se espera que hagamos: ¿Tenemos que armar un "struct" para crear una secuencia de espacios de memoria anidados con punteros, para así armar una "frase" (letra del ejercicio)? (tal como definíamos las listas en programación 1). Entiendo que se pide que la función reciba un puntero a carácter, pero no sabría afirmar lo que continúa.
Por otro lado, la segunda, no sabría diferenciar entre un arreglo dinámico y la estructura "convencional" mencionada anteriormente. En el pdf brindado para comprender más en profundidad el "lenguaje C*" se menciona por arriba la existencia de este tipo de arreglo: , pero, ¿Cuál es la diferencia de este mismo con una lista de punteros anidados? ¿No se supone que, si es dinámico, tendría más sentido no marcar un tamaño fijo? (int[10]) Entiéndase que no comprendo dicha estructura, puesto que no cuento con información sobre la misma.

Lamento las molestias ocasionadas, espero mis consultas sean consideradas. Saludos,
Daniel

En respuesta a Daniel Ezequiel Diniz Figueredo

Re: Ejercicio 4 - Estructura a implementar

de Matias Richart -
Hola Daniel.

Tus preguntas son totalmente pertinentes. Voy a intentar responderlas todas, aunque no en el orden que las hiciste.

Lo primero, creo que es importante dejar claro que es un arreglo. Un arreglo es una secuencia de elementos del mismo tipo almacenados consecutivamente en memoria. Es decir, su un elemento de un arreglo está en la posición X y tiene tamaño 4, el siguiente elemento del arreglo estará en la posición de memoria X+4. Además, el arreglo luego de definido tiene un tamaño máximo dado y el cual no se puede modificar. Dada esta característica del arreglo, de estar consecutivo en memoria, le permite a los lenguajes ofrecernos la posibilidad de acceder a cada elemento del arreglo de forma directa a través de un índice, por ejemplo arreglo[5] me devuelve el elemento en la posición 4 del arreglo.

Esto es totalmente diferente a una lista enlazada de nodos. En una lista, cada elemento puede estar en cualquier lugar de memoria, y para acceder a un elemento de la lista hay que "navegar" por la lista. Es decir, cada elemento (o nodo) tiene una referencia (un puntero) al siguiente elemento y esto es lo que nos permite acceder a todos los elementos. Sin embargo, no podemos acceder de forma directa a un elemento como si en un arreglo.

Con esto claro, volvamos a los arreglos.
En C, el arreglo lo podemos definir de dos formas (siendo muy generales): el tamaño se define en momento de compilación o el tamaño se define en momento de ejecución.
Al primer caso, se le suele llamar estático y al segundo dinámico, aunque esto es un poco confuso porque no es muy dinámico el segundo caso.

En el primer caso, el tamaño del arreglo es una constante dada por el programador y al momento de compilar, el compilador ya puede reservar el espacio de memoria necesario para ese arreglo.
En C esto se hace así: int vector[5]; Esto define un arreglo de enteros de tamaño 5.

El el segundo caso, el tamaño del arreglo puede ser una variable cuyo valor puede depender de la ejecución del programa y la reserva de memoria se hace mientras el programa está en ejecución.
En C esto se hace así: int * vector = new int[var]; Esto define un arreglo de enteros de tamaño 'var', donde var es una variable entera.
Este arreglo, luego de instanciado tampoco puede modificar su tamaño.

Luego, en el ejercicio se pide que utilices el segundo caso. Es verdad lo que dices que puede no tener mucho sentido hacer esto int * vector = new int [10], si ya se sabe el tamaño al momento de escribir el programa. Entiendo que es solo un ejemplo.

Saludos