Es importante tener definiciones claras de lo que significan los términos. Desafortunadamente, parece haber múltiples definiciones de lo que significan matrices estáticas y dinámicas.
Las variables estáticas son variables definidas mediante la asignación de memoria estática . Este es un concepto general independiente de C / C ++. En C / C ++ podemos crear variables estáticas con alcance global, de archivo o local como este:
int x[10];
static int y[10];
foo() {
static int z[10];
Las variables automáticas generalmente se implementan mediante la asignación de memoria basada en pilas . Se puede crear una matriz automática en C / C ++ como esta:
foo() {
int w[10];
Lo que estos arreglos, x, y, z
y w
tienen en común es que el tamaño de cada uno de ellos es fijo y se define en el momento de la compilación.
Una de las razones por las que es importante comprender la distinción entre una matriz automática y una matriz estática es que el almacenamiento estático generalmente se implementa en la sección de datos (o sección BSS ) de un archivo de objeto y el compilador puede usar direcciones absolutas para acceder a las matrices. lo cual es imposible con el almacenamiento basado en pilas.
Lo que generalmente se entiende por matriz dinámica no es una que se pueda cambiar de tamaño, sino una implementada mediante la asignación de memoria dinámica con un tamaño fijo determinado en tiempo de ejecución. En C ++ esto se hace usando el new
operador .
foo() {
int *d = new int[n];
Pero es posible crear una matriz automática con un tamaño de corrección definido en tiempo de ejecución usando alloca
:
foo() {
int *s = (int*)alloca(n*sizeof(int))
Para una verdadera matriz dinámica, se debe usar algo como std::vector
en C ++ (o una matriz de longitud variable en C ).
¿Qué significaba la asignación en la pregunta del OP? Creo que está claro que lo que se quería no era una matriz estática o automática, sino una que usaba la asignación de memoria dinámica usando el new
operador o una matriz de tamaño no fijo usando, por ejemplo std::vector
.