Avatar billede lifehacker Nybegynder
25. august 2008 - 21:44 Der er 17 kommentarer

Dynamiske vs. Statiske Arrays

Hej med jer,

Jeg er nybegynder, og skal til eksamen i C++ og skal forklare hvad forskellen på Dynamiske vs. Statiske Arrays er.

Nogen som kan hjælpe mig?? Jeg er på bare bund.

Er dynamiske arrays dem som initaliseres på heapen? Og statiske på stakken? Eller har det INTET med dette at gøre?
Avatar billede arne_v Ekspert
25. august 2008 - 22:10 #1
Som ofte er begreber jo ikke veldeineret.

Jeg vil tro at du mener:

static array = array hvis stoerrelse kendes paa compile time
dynamic array = array hvis stoerrelse foerst kendes runtime

Nogen bruger dog ogsaa udtrykker dynamic array om dynamiske strukturer som STL vector, hvilket
er en helt anden betydning.
Avatar billede arne_v Ekspert
25. august 2008 - 22:13 #2
Hvis vi nu antager mine definitioner:

#define N 3

int a[N]; // static array allokeret paa heap

int m(int n)
{
    int b[N]; // static array allokeret paa stack
    int c[n]; // dynamic array allokeret paa stack (kraver C99 compiler !)
    int *d = (int *)malloc(n*sizeof(int)); // dynamic array allokeret paa heap
    int *e = new int[n]; // dynamic array allokeret paa heap
}
Avatar billede lifehacker Nybegynder
25. august 2008 - 22:38 #3
Er stadig ikke med, beklager!

Hvad er syntaxen på disse notationer?
1. static array = array hvis stoerrelse kendes paa compile time
2. dynamic array = array hvis stoerrelse foerst kendes runtime'
Avatar billede lifehacker Nybegynder
25. august 2008 - 22:41 #4
Tak for eksemplet, men jeg er total nybegynder og ved ikke ret meget om malloc osv. har stadig svært ved at finde ud af forskellen på stakken og heapen. Ved at heapen er "den frie hukommelse", og man kan se det som de rum i hukommelsen man ikke kan sætte et etikette på... mens stakken er den del af hukommelsen som er af LIFO-strukturen, dvs last in first out.... men hvordan ses det i forhold til arrays??
Som sagt, jeg er meget i tvivl om syntaxen.
Avatar billede arne_v Ekspert
25. august 2008 - 23:04 #5
De to "notationer" er ikke C++ syntax med dansk syntax !
Avatar billede arne_v Ekspert
25. august 2008 - 23:06 #6
... men dansk syntax !
Avatar billede arne_v Ekspert
25. august 2008 - 23:07 #7
Heap og stack er to forskellige steder i memory, new/malloc allokerer fra heap,
delete/free deallokerer fra heap, lokale variable allokeres paa stack, de deallokeres
automatisk naar funktionen/metoden afslutter.
Avatar billede lifehacker Nybegynder
25. august 2008 - 23:29 #8
Tror du misforstod mht syntaxen.

Hvordan skriver man et dynamisk og statisk array?
Er det måden de initaliseres på, eller?

Dynamisk:
int myArray[]={1,2,3,4}

Statisk:
int myArray[5];

??

Hvad er forskellen i det jeg skriver?
Avatar billede arne_v Ekspert
25. august 2008 - 23:31 #9
De er begge statiske da laengden kendes compile time (henholdvis 3 og 5).
Avatar billede lifehacker Nybegynder
25. august 2008 - 23:36 #10
Dvs dette array er dynamisk

int myArray[];

?
Avatar billede lifehacker Nybegynder
25. august 2008 - 23:37 #11
Hov, hvad mener du med 3 og 5?

er det ikke 4 og 5? eller?
Avatar billede arne_v Ekspert
26. august 2008 - 00:33 #12
int myArray[];

vil ikke compile !
Avatar billede arne_v Ekspert
26. august 2008 - 00:33 #13
Jo - 4 og 5.

Nogen gange kniber det med at tælle så mange tal.

:-)
Avatar billede lifehacker Nybegynder
26. august 2008 - 01:07 #14
;-) helt i orden, det sker.

ok dvs. int myArray[];  er ikke et dynamisk....

nøøjjj... jeg forstår det stadig ikke. Når du skriver:
static array = array hvis stoerrelse kendes paa compile time
dvs. statiske arrays er de arrays som oprettes på stakken?? og består af LIFO-strukturen?  Kan overhoved ikke visualisere det for mig. 

dynamic array = array hvis stoerrelse foerst kendes runtime
dvs. man kender dets størrelse når programmet kører, men ikke inden og det er derfor arrayet oprettes på heapen??
Avatar billede arne_v Ekspert
26. august 2008 - 01:12 #15
void f(int n)
{
  int x[3]; // vi ved der er 3 elementer når der compiles
  int y[] = { 7, 8, 9 }; // vi ved at der er 3 elementer når der compiles
  int *z = new int[n]; // vi ved først når funktionen kaldes hvad n er
Avatar billede arne_v Ekspert
30. august 2008 - 01:54 #16
OK ?
Avatar billede arne_v Ekspert
28. oktober 2008 - 03:13 #17
?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester