Ga naar inhoud

Multidimensionale array als functieparameter (c++)


Aanbevolen berichten

stel ik heb: [code:1:368ba03352]int wereld[Xmax][Ymax]; functie(wereld, Xmax, Ymax);[/code:1:368ba03352] in int main(). Nu wil ik in de functie deze array gaan ophalen. [code:1:368ba03352]void functie(tabel[][],Xmax,Ymax[/code:1:368ba03352] Bij een ééndimensionale array werkt dit (dus tabel[]), maar zodra er meerdere dimensies bij komen snapt ie het ineens niet meer. Hoe kan ik toch een multidimensionale array doorgeven aan een functie, waarvan de grootte wordt gedefinieerd in int main(), bijv met een cin >> Xmax >> Ymax ???
Link naar reactie
Ik weet het niet helemaal zeker, maar volgens mij zit het zo: Als je in C++ een array als parameter meegeeft, wil de compiler weten hoe groot de elementen in de array zijn (hoeveel geheugen ze innemen). Bij een array van integers is dat dus makkelijk (elk element in de array heeft de grootte van een integer). Een tweedimensionale array is eigenlijk een array van arrays. Op deze manier kan de compiler echter niet zien hoe groot de 'elementen' zijn in de 'array', oftewel hoe groot de arrays zijn in de lijst met arrays. Om dit op te lossen zou je de grootte van de arrays in de arrays mee kunnen geven als volgt: [code:1:6c34709ae4]void functie(int tabel[][5], int Xmax, int Ymax)[/code:1:6c34709ae4] Bovenstaande zou moeten werken. Nadeel is echter dat je dan gebonden bent aan een bepaalde grootte van je arrays. Een alternatief is om het adres naar de tweedimensionale array als pointer mee te geven aan je functie. Dan zou je niet gebonden zijn aan een vaste grootte, alleen is dit wellicht wat complexer te realiseren.
Link naar reactie
Hmm, het is voor mij ook allemaal weer even geleden, maar zoals ik [url=http://www.eskimo.com/~scs/cclass/int/sx9a.html]hier (klik)[/url] lees is het dus niet mogelijk met pointers. Wat je wel zou kunnen doen is gebruik maken van een Vector (zie [url=http://www.devx.com/cplus/Article/16328/0/page/6]hier, tip 19[/url]). Een andere optie is om je multidimensionale array als een 1-dimensionale array op te slaan (pseudo-multidimensionaal). Dus dan krijg je: [code:1:31eb7c7bed]int wereld[Xmax * Ymax];[/code:1:31eb7c7bed] Om dan element wereld[x][y] op te vragen, gebruik je dit: [code:1:31eb7c7bed]wereld[y * Xmax + x];[/code:1:31eb7c7bed]
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...