É importante ter definições claras do significado dos termos. Infelizmente, parece haver várias definições do que significam os arrays estáticos e dinâmicos.
Variáveis estáticas são variáveis definidas usando alocação de memória estática . Este é um conceito geral independente de C / C ++. Em C / C ++, podemos criar variáveis estáticas com escopo global, de arquivo ou local como este:
int x[10];
static int y[10];
foo() {
static int z[10];
Variáveis automáticas são geralmente implementadas usando alocação de memória baseada em pilha . Uma matriz automática pode ser criada em C / C ++ assim:
foo() {
int w[10];
O que esses arrays, x, y, z
e w
têm em comum é que o tamanho de cada um deles é fixo e definido em tempo de compilação.
Uma das razões pelas quais é importante entender a distinção entre um array automático e um array estático é que o armazenamento estático é geralmente implementado na seção de dados (ou seção BSS ) de um arquivo de objeto e o compilador pode usar endereços absolutos para acessar os arrays o que é impossível com armazenamento baseado em pilha.
O que geralmente significa um array dinâmico não é aquele que pode ser redimensionado, mas um implementado usando alocação de memória dinâmica com um tamanho fixo determinado em tempo de execução. Em C ++, isso é feito usando o new
operador .
foo() {
int *d = new int[n];
Mas é possível criar uma matriz automática com um tamanho de correção definido em tempo de execução usando alloca
:
foo() {
int *s = (int*)alloca(n*sizeof(int))
Para um verdadeiro array dinâmico, deve-se usar algo como std::vector
em C ++ (ou um array de comprimento variável em C ).
O que significava a atribuição na pergunta do OP? Acho que está claro que o que se queria não era um array estático ou automático, mas um que usasse alocação de memória dinâmica usando o new
operador ou um array de tamanho não fixo usando, por exemplo std::vector
.