Domanda

So che è possibile aumentare la dimensione di un array allocato dinamicamente.

Ma posso aumentare la dimensione di un array allocato in modo statico? Se sì, come?

EDIT:? Anche se questa domanda è destinata per il linguaggio C, in considerazione altre lingue too.Is possibile in qualsiasi altra lingua

È stato utile?

Soluzione

semplice risposta è no, questo non può essere fatto. Da qui il nome "statica".

Ora, un sacco di lingue hanno le cose che sembrano gli array allocato in modo statico, ma in realtà sono allocati staticamente riferimenti a un array allocato dinamicamente. Quelli si potrebbe ridimensionare.

Altri suggerimenti

in VB .NET sarebbe:

Redim Preserve ArrayName(NewSize)

non sicuro di quello che stai dopo langauge però ...

E non vorrei utilizzare questo comando un sacco ... la sua terribilmente inefficiente. liste collegate e in crescita le strutture dati sono molto più efficienti.

No. Non è. Ci sono due opzioni qui:

  1. Utilizzare uno dinamico
  2. In alternativa, con il rischio di perdere la memoria, se avete un'idea circa il numero massimo di elementi che l'array sarà memorizzare, staticamente allocare di conseguenza

Sì, era C.

Se si sta attenti, è possibile utilizzare alloca(). L'array è allocato sullo stack, ma in termini di stile di codice è un po 'come se si è utilizzato malloc (non c'è bisogno di free esso, però, che è fatto automaticamente). Ti lascerò decidere se chiamare che una matrice "statico".

No. allocazione statica dà il permesso compilatore a fare tutti i tipi di ipotesi che vengono poi cotti nel programma durante la compilazione.

Tra questi presupposti sono che:

  1. è sicuro di mettere altri dati immediatamente dopo l'array (non lasciando spazio per crescere), e
  2. che l'array inizia da un certo indirizzo, che poi diventa parte del codice macchina del programma; Non è possibile assegnare un nuovo array da qualche parte (e usarlo), perché i riferimenti al indirizzo non possono essere aggiornati.

(Beh, i riferimenti potrebbe essere aggiornato, se il programma è stato memorizzato nella RAM, ma i programmi di auto-modifica sono molto malvisto, e sicuramente più problemi che gli array dinamici.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top