(Asignación dinámica de memoria) la instrucción string *Nombres[20] declara un arreglo de 20 apuntadores a caracter, los cuales pueden servir como apuntadores a nombres para después procesarlos. Pero qué tal si el número de nombres a usar requiere que sea introducido por el usuario y determinarse en tiempo de ejecución, entonces tenemos que resera dinámicamente la memoria para el arreglo Nombres.
Respuestas a la pregunta
Respuesta:
Explicación:
No se especifica el lenguaje de programación en que está esa expresión pero lo que más se asemeja es a una expresión en Java. Si es así, ese vector declara un arreglo de 20 punteros a datos de tipo string.
Cuando a continuación se crean los datos de tipo string, se le asigna memoria en función del espacio que requieran.
Ahora bien, no se puede determinar en tiempo de ejecución el tamaño de un vector ya que este se debe define al compilar para que el compilador pueda mapear la memoria.
Si el número de nombres ingresado es menor de 20 no hay problemas respecto de la asignación de memoria, pues el vector tiene 20 posiciones y por cada elemento que se agregue el programa pondrá un puntero en la posición siguiente, y en la posición que el valor sea un NULL, sabrá que ahí no hay datos.
El problema se presenta cuando se quieren ingresar más de 20 nombres, pues el programa puede dar error de compilación o fallar en tiempo de ejecución al excederse la memoria reservada para el vector.
En ese caso de requerir un arreglo de tamaño variable hay que recurrir a una estructura denominada lista enlazada. Consistente en una estructura autoreferenciada con el siguiente formato:
struct nodo{
String sNombre;
struct nodo *sig;
};
Donde sig es un puntero que se direcciona al siguiente elemento de la lista enlazada y una variable guarda siempre el primer valor desde donde se puede ir recorriendo la lista.