Gå til innhold

opprette dynamisk todimensjonal array i C og C++?


Anbefalte innlegg

Hei

 

Jeg har lenge sittet med følgende spørsmål; hvordan får jeg opprettet en todimensjonal array under runtime i C++ (eller gjerne/helst C)?

 

int var[][] funker jo fint hvis man vet størrelsen på forhånd, men for mitt bruk trenger jeg å kunne sette av minne på forhånd.

 

Dynamisk minneallokering og frigjøring er definitivt vrient da det såvidt jeg vet ikke eksisterer noen new[][] og delete [][] operator?

Lenke til kommentar
Videoannonse
Annonse
du har ikke tilfeldigvis også peiling på hvordan man overloader [][] i en klasse? :)

5583941[/snapback]

Det går nok dørlig. Det er jo objektet som returneres av operator [] som [] nummer to opererer på. For å oppnå todimensjonal aksessering i C++ pleier man å ty til operator () i stedet, er jeg redd.

Lenke til kommentar
Hei

 

Jeg har lenge sittet med følgende spørsmål; hvordan får jeg opprettet en todimensjonal array under runtime i C++ (eller gjerne/helst C)?

 

int var[][] funker jo fint hvis man vet størrelsen på forhånd, men for mitt bruk trenger jeg å kunne sette av minne på forhånd.

 

Dynamisk minneallokering og frigjøring er definitivt vrient da det såvidt jeg vet ikke eksisterer noen new[][] og delete [][] operator?

5583143[/snapback]

 

Jeg kan ikke C++, men her er standard C måte å gjøre dette på:

 

int* array[x][y];
int x;
int y;

// Gi verdier til x og y på en eller annen måte

array = (int *)malloc(sizeof(int)*x*y);

// For å skrive ut alle elementer vha for løkker gjør du slik:
for(i= 0; i < x; i++){
   for(j = 0; j < y; j++){
       printf("%d", array[i*y + j]);
   }
}

 

Det du gjør på linjen med malloc er å allokere plass i minnet tilsvarende x*y* størrelsen på en int. Kan også gjøre dette slik at arrayet kan aksesseres slik: array[x][y], men dette er ikke vanlig i C. Det gjøres slik:

 

array = (int **)malloc(sizeof(int)*x);
for(i = 0; i < x;i++){
   array[i] = (int *)malloc(sizeof(int)*y);
}

 

Det du gjør her er å opprette en dobbeltpeker, eller en peker til ei liste med pekere... da kan du aksessere arrayet som array[x][y]

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...