¿Es posible tener un número de elementos en una matriz más que el tamaño de la matriz que se define en un momento de compilación?

Si está definiendo el tamaño de la matriz en tiempo de compilación, su intención es normalmente permitir la asignación de memoria de tiempo de compilación y, en los idiomas que implementan la validación de índice fuera de límites, verifique que durante el tiempo de compilación, si es posible (esto se puede hacer para índices que pueden se resuelva a una constante durante el tiempo de compilación) o durante el tiempo de ejecución para cada acceso a la matriz.

Existe un concepto sólido en la programación sobre tipeo fuerte, que permite que el marco del lenguaje verifique y evite errores, para ayudar al programador. Algunas veces se ha demostrado que la escritura fuerte es demasiado fuerte, por lo que se han desarrollado compromisos a medio plazo, como tipos de variantes, clases virtuales, etc. Pero la idea a tener en cuenta es que alguna forma de tipeo fuerte es buena, en lugar de ser simplemente un obstáculo engorroso.

Por lo tanto, generalmente iría en contra de la filosofía del lenguaje, por así decirlo, cambiar un atributo predefinido de una variable, como su tamaño, durante la ejecución. En el caso en que necesite cambiar el tamaño / reescritura de variables dinámicas, existirá una construcción gramatical específica para decir explícitamente que (por ejemplo: en Basic, una instrucción ReDim puede cambiar el tamaño de la matriz durante la ejecución; algunos dialectos básicos requieren que haga la primera definición de esa matriz con alguna sintaxis que indicará que luego se redimensionará; algunos otros dialectos no); en C puede declarar un puntero y asignar memoria dinámicamente, en lugar de emplear una declaración de variable fija y preestablecida. Algunos idiomas exóticos pueden permitirte hacer lo que quieras como parte cotidiana.

En la mayoría de los idiomas, el tamaño de una matriz no está definido en tiempo de compilación. Puede establecer el tamaño utilizando una variable, cuyo valor no se conocerá hasta el tiempo de ejecución. Sin embargo, es cierto que una vez que se inicia la matriz, no se puede cambiar su tamaño. Su pregunta contiene su propia respuesta. Una vez que se define el tamaño, no puede tener más elementos. En algunos lenguajes (especialmente C), no siempre obtendrá un bloqueo inmediato si establece o lee un valor fuera del rango de la matriz, pero seguirá siendo un error, y probablemente sea una fuente de bloqueos intermitentes u otro comportamiento defectuoso con el tiempo.

En la mayoría de los idiomas, las matrices tienen un tamaño fijo por definición. Si desea algo similar a una matriz pero redimensionable, su lenguaje puede proporcionar estructuras como ArrayList o Vector. La compensación está entre la simplicidad de ejecución y la consecuente eficiencia de la matriz, por un lado, y la flexibilidad de ArrayList o Vector, por otro.

Claro, si su afortunado valor de índice de matriz erróneo producirá un error de memoria en la memoria no asignada, entonces obtendrá un buen mensaje de error. De lo contrario, solo accederá a algún valor aleatorio en su memoria asignada. Algunos compiladores tienen opciones de tiempo de ejecución para verificar los límites de la matriz, pero estos ralentizan el tiempo de ejecución.

More Interesting

¿Cuáles son los principales cambios en los algoritmos de Google en 2017?

Dado que muchos algoritmos de aprendizaje automático se ejecutan en GPU, ¿Julia sigue siendo una buena opción para eso?

¿Cuál es el mejor sitio para aprender la estructura de datos y el algoritmo?

¿Cuál es el algoritmo más genial (programación competitiva) que hayas encontrado?

¿Cuál es la forma lógica de resolver el problema SPOJ 'Palin'?

¿Por qué Python es realmente más lento en algunos cálculos que Java? Las profundidades recursivas también son limitadas.

Cómo hacer un robot que pueda resolver un laberinto de líneas

¿Podemos implementar la estructura de datos de la cola usando la estructura de datos de la pila?

¿Cuál es una manera simple de implementar la paginación en una matriz en Javascript?

¿Por qué encontrar el trabajo múltiple menos común?

Cómo calcular la similitud semántica entre un automóvil y una bicicleta mediante el algoritmo Jian y Conrath

¿Qué bibliotecas o marcos de Python, C son buenos para las pruebas de diagnóstico en estadísticas?

Dada una lista de enlaces con punteros derechos, cada elemento de la lista tiene un enlace descendente que contiene otra lista de enlaces con punteros descendentes, de modo que cada lista derecha y abajo están ordenadas. ¿Cuál es la forma más rápida de aplanar la lista de enlaces de forma ordenada?

¿Por qué las computadoras se crean de tal manera que entiendan 0s y 1s?

Lenguaje ensamblador: ¿Por qué las instrucciones INC y DEC no establecen la bandera de acarreo?