Ga naar inhoud

[VB] array van lengte nul niet mogelijk?


Aanbevolen berichten

[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.
Link naar reactie
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.
Link naar reactie
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.
Link naar reactie
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.
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...