Restringiré mi respuesta a ISO / ANSI C (dependiendo de su sistema operativo, su compilador, … , pueden surgir otras posibilidades).
En C89, debe pasar por mecanismos de asignación dinámica ( malloc
, calloc
, etc. ).
A partir de C99, puede usar matrices de longitud de matriz variable (VLA). Por ejemplo:
- Cómo resolver este problema con un árbol de segmentos o BIT
- ¿Por qué el introsort se convierte de quicksort a heapsort después de cierta profundidad?
- ¿Qué algoritmo de búsqueda usan los sitios de matrimonio en línea en India?
- ¿Por qué es imposible tener un tipo de comparación mejor que el tiempo O (nlogn)?
- ¿Cuál es la mejor manera de procesar consultas de accesibilidad en un DAG con restricciones?
#include
#include
#include
#include
vacío
display_alphabet_chars_until (size_t sz)
{
afirmar (sz <= SCHAR_MAX);
char str [sz + 1];
for (char c = ‘a’; c <sz; ++ c)
str [c] = c;
str [sz] = ‘\ 0’;
pone (str);
}
En t
principal (nulo)
{
display_alphabet_chars_until (10);
display_alphabet_chars_until (20);
display_alphabet_chars_until (26);
display_alphabet_chars_until (60);
devuelve 0;
}
Lo único que debe recordar es que debe tener un valor válido para proporcionar al compilador para que pueda calcular correctamente la longitud de la matriz en tiempo de ejecución.
Tenga en cuenta que C ++ no admite VLA (pero puede usar
para obtener algo equivalente en C ++ 11). Array
EDITAR : como mencionó Fayyaz K. Lodhi, los VLA todavía se basan en un esquema de asignación algo dinámico. Sin embargo, la mayoría de los compiladores usan
para almacenar estos objetos (generalmente pequeños) en la pila del proceso en tiempo de ejecución. Como resultado, hay poca sobrecarga; de hecho, es bastante similar a asignar alloca
variables que definiría dentro de una función, solo que más rápido, ya que generalmente solo significa mover el puntero de la pila por n
bytes . n * sizeof(type of the array)