abcd423417984 Skrevet 10. februar 2006 Skrevet 10. februar 2006 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?
Peter Skrevet 10. februar 2006 Skrevet 10. februar 2006 (endret) int** arr = new int* [50]; for(int i=0;i<50;i++) { arr[i] = new int[100]; } burde funke Endret 10. februar 2006 av Nazgul
abcd423417984 Skrevet 10. februar 2006 Forfatter Skrevet 10. februar 2006 du har ikke tilfeldigvis også peiling på hvordan man overloader [][] i en klasse?
A_N_K Skrevet 10. februar 2006 Skrevet 10. februar 2006 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.
mikaelandre Skrevet 10. februar 2006 Skrevet 10. februar 2006 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]
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå