Terimlerin ne anlama geldiğine dair net tanımlara sahip olmak önemlidir. Ne yazık ki, statik ve dinamik dizilerin ne anlama geldiğine dair birden fazla tanım var gibi görünüyor.
Statik değişkenler , statik bellek tahsisi kullanılarak tanımlanan değişkenlerdir . Bu, C / C ++ 'dan bağımsız genel bir kavramdır. C / C ++ 'da aşağıdaki gibi global, dosya veya yerel kapsamda statik değişkenler oluşturabiliriz:
int x[10];
static int y[10];
foo() {
static int z[10];
Otomatik değişkenler genellikle yığın tabanlı bellek tahsisi kullanılarak uygulanır . C / C ++ 'da şu şekilde otomatik bir dizi oluşturulabilir:
foo() {
int w[10];
Ne bu diziler, x, y, z
ve w
ortak noktası bunların her biri için boyut sabittir ve derleme zamanında tanımlanan olmasıdır.
Otomatik dizi ile statik dizi arasındaki farkı anlamanın önemli olmasının nedenlerinden biri, statik depolamanın genellikle bir nesne dosyasının veri bölümünde (veya BSS bölümünde ) uygulanması ve derleyicinin dizilere erişmek için mutlak adresler kullanabilmesidir. yığın tabanlı depolamayla bu imkansızdır.
Genellikle dinamik dizi ile kastedilen, yeniden boyutlandırılabilen değil, çalışma zamanında belirlenen sabit bir boyuta sahip dinamik bellek ayırma kullanılarak uygulanan bir dizidir . C ++ 'da bu, new
operatör kullanılarak yapılır .
foo() {
int *d = new int[n];
Ancak, aşağıdakileri kullanarak çalışma zamanında tanımlanan bir düzeltme boyutuna sahip otomatik bir dizi oluşturmak mümkündür alloca
:
foo() {
int *s = (int*)alloca(n*sizeof(int))
Gerçek bir dinamik dizi std::vector
için C ++ 'da olduğu gibi (veya C'de değişken uzunluklu bir dizi ) kullanılmalıdır.
OP'nin sorusundaki görev için ne ifade edildi? Sanırım, istenen şeyin statik veya otomatik bir dizi değil, new
operatörü kullanarak dinamik bellek tahsisi veya örn std::vector
.