anoniem Geplaatst: 26 maart 2002 Delen Geplaatst: 26 maart 2002 onderstaande compileert uiteraard niet, maar de bedoeling is duidelijk: Dim arrayOfInt(0 To -1) As Integer bvd Quote Link naar reactie
anoniem Geplaatst: 26 maart 2002 Auteur Delen Geplaatst: 26 maart 2002 [code:1:6e9bba7c1a]Option Explicit Private Type NAWType Voornaam as String Achternaam as String Leeftijd as Integer Adres as String Woonplaats as String End Type Private NAW() as NAWType[/code:1:6e9bba7c1a] Heeft bovenstaand array nu wel of geen lengte? Is het een array per definitie? Of is het alleen maar een declaratie? Wanneer je er getallen inzet, dan heeft de array wel degelijk een lengte. 'Dim NAW(0 TO 0)' heeft al een lengte van 1 keer het array, 'Dim NAW(0 TO -1)' heeft zelfs een lengte van twee keer het array. Ik zit nu niet aan mijn computer waar ik mee programmeer maar ik denk dat dit wel degelijk compileert. Misschien moet het worden 'Dim NAW(0 to -1 STEP -1)' maar ik kan dit niet controleren. Wel een interessante vraag, overigens. Quote Link naar reactie
anoniem Geplaatst: 26 maart 2002 Auteur Delen Geplaatst: 26 maart 2002 het is een variabele (stukje geheugen) gereserveerd voor het opslaan v/e array van 0 ints :smile: ik heb op de pc waar ik nu achterzit vb niet geinstalleerd (voel d'r eerlijk gezegd ook weinig voor om dat nu te doen), maar vanmorgen op m'n werk was ik een tijdje aan 't knoeien in versie 6 v/deze ontwikkelomgeving en het lukte me maar niet om het in m'n vorige post gevraagde voor elkaar te krijgen... ik meen te herinneren dat de decleratie (0 To -1) niet geaccepteerd werd, de preciese foutmelding, en code, ben ik helaas vergeten. Quote Link naar reactie
anoniem Geplaatst: 26 maart 2002 Auteur Delen Geplaatst: 26 maart 2002 Zit nu achter de goede computer, en heb het bovenstaande geprobeerd. Het blijkt dat je met een array niet achteruit kan tellen maar negatieve getallen zijn geen probleem. ReDim NAW(0 To 6) Gaat prima ReDim NAW(6 To 0) Gaat niet ReDim NAW(-4 To 4) Gaat prima ReDim NAW(-4 To -2) Gaat prima ReDim NAW(0 To -1) Gaat niet De bijbehorende foutmelding heeft het over subscripts die 'out of range' zijn. En dat STEP gebeuren in een array kent VB helemaal niet, ook een ReDim NAW(1 To 9 Step 2) geeft een foutmelding. In ieder geval, jouw vraag krijgt het antwoord nee, er bestaat niet iets als een array met lengte nul. Quote Link naar reactie
anoniem Geplaatst: 26 maart 2002 Auteur Delen Geplaatst: 26 maart 2002 dat je in vb arrays negatief kan indexeren had ik vandaag idd ook opgemerkt, maar een array van lengte nul bestaat dus weer niet... vreemd bedankt voor de moeite. Quote Link naar reactie
anoniem Geplaatst: 1 april 2002 Auteur Delen Geplaatst: 1 april 2002 Volgens mij bestaat er wel een array met lengte nul. Als een dynamische array declareert met (Dim Array() as ...) dan is de lengte nul. Om een array die geherdimensioneerd is met redim weer een lengte van nul te geven gebruik je Erase. Quote Link naar reactie
anoniem Geplaatst: 1 april 2002 Auteur Delen Geplaatst: 1 april 2002 Ik dacht dat ik dat al geprobeerd had (weet 't niet zeker meer). Erase kende ik niet, ga 't morgen proberen. Quote Link naar reactie
anoniem Geplaatst: 2 april 2002 Auteur Delen Geplaatst: 2 april 2002 Dat Erase werkt dus wel mooi, het werkt beter dan ReDim ArrayOfInt(0 To 0). Ik kende dat Erase nog niet. Vraag is nu, als je een dynamische array declareert, dan zullen gegevens over de array in het geheugen staan (wat voor soort array is het, hoe groot is het) maar staat daar dan ook een startadres? Als dat zo is dan zal zelfs een gedeclareerde array een lengte hebben van een adres (16 of 32 bits), het startadres. Deze lengte komt dan niet overeen met de lengte van een element. Tweede vraag, wanneer in de eerste vraag geen adres in gebruik wordt genomen, hoe zit het dan met de situatie wanneer Erase gebruikt wordt? Wordt dan simpelweg de lengte op nul gesteld en wordt het startadres behouden of wordt de situatie gelijk aan een declaratie waarin het startadres niet gebruikt wordt tot de array een bepaalde lengte toegewezen wordt. Omdat een lengte van een array niet bekend is (maar de lengte van een array element wel), zal er ook geen startadres bekend zijn. Pas wanneer de lengte bekend is zal er een stuk geheugen vrijgemaakt worden dat minimaal even groot is als de lengte van het array maal de lengte van ieder element. Volgens MSDN geeft Erase het geheugen vrij dat gebruikt wordt door een dynamische array; dat is niet gelijk aan het op nul stellen van een array. De situatie van een declaratie bestaat weer, ergens in het geheugen staat een stukje informatie over de array maar het array heeft geen begin adres en neemt dus ook geen geheugen in beslag. Derhalve kun je ook niet spreken over een array van lengte nul want de array bestaat gewoonweg niet. Het enigste wat bestaat is informatie over de array. Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen