Meer arrays

In deze tutorial zal ik je wat meer laten zien over het gebruik van arrays in de vrije geheugen ruimte en hoe je arrays met pointers kunt maken. Arrays met pointers kun je op twee manieren maken, namelijk:

auto *mercedes[10];
auto *mercedes = new auto[10];
Het verschil tussen deze twee is dat de eerste een array met 10 pointers naar auto's is en de tweede is een pointer naar array van 10 auto's die de eerste auto aanwijst dus auto[0]. Hieronder een voorbeeldje over array's in de vrije geheugenruimte.


int main()
{
  auto *mercedes = new auto[10];
  int x;
  auto *pauto;
  
  for(x=0; x<10; x++)
  {
    pauto = new auto;
	pauto->snelheid = 180+x;
	mercedes[x] = pauto;
	delete pauto;
  }
  
  for (x=0; x<10; x++)
  {
    cout << mercedes[x].snelheid;
  }
  
  delete [] mercedes;
  return 0;
}  
We maken hier dus eerst een array van 10 auto's in de nieuwe geheugenruimte en een pointer naar een auto die we telkens naar het array kunnen kopieren. In de for lus wordt telkens een nieuwe auto gemaakt waar pauto naar wijst en wordt de snelheid ingesteld. Vervolgens maken we mercedes[x] gelijk aan pauto waardoor alle data op een bepaalde plek in de array in de vrije geheugen ruimte komt te staan bijv. mercedes[2]. Omdat pauto telkens opnieuw wordt gebruikt moeten we het geheugen natuurlijk weer vrijgeven anders blijft de data er in staan zonder dat we het adres weten. Als laatste heb ik nog een loop gemaakt die voor elke mercedes in de array de snelheid weergeeft en moeten we het vrije geheugen van de array nog vrij geven. Door de twee haakjes [] weet de compiler dat het een array is dat moet worden verwijderd als je deze zou vergeten wordt namelijk alleen maar het eerste object gewist (mercedes[0]).

Character arrays

Tot nu toe hebben we gezien dat je getallen in kunt voeren maar met tekst zijn we nog niet bezig geweest en daar gaan we nu wat aan doen. Door een array met karakters te maken kun je een teken reeks of string opslaan. Bovendien is het mogelijk om deze string te kopieren wat op 2 manieren mogelijk is en ik hieronder zal laten zien.

#include <iostream.h>
#include <string.h>

int main()
{
  char str1[20], str2[20];
  
  cin.get(str1, 19);
  
  strcpy(str2,str1);
  
  cout << str1 <<"\n";
  cout << str2;
  
  return 0;
}
In dit voorbeeldje zie je dus dat ik 2 strings heb gemaakt met een lengte van 20, niks nieuws dus. Wat wel nieuw is is cin.get waar je 2 parameters in moet vullen, de eerste geeft aan waar de invoer moet worden opgeslagen, en de tweede geeft de maximale lengte van de invoer aan. Zou je dit niet doen dan kan er voorbij het einde van het array geschreven worden en die data zou je dan gewoon kwijt zijn. Waarom ik heb gekozen voor een maximale lengte van 19 en geen 20 heeft ook een reden, een tekst string moet altijd worden afgesloten met een null teken ('\0') deze komt dus op de laatste plaats in de array wat automatisch gebeurt als je het op deze manier doet. Het andere nieuwe is strcpy die str1 naar str2 kopieert, het nadeel hiervan is dat als de lengte van de string langer is dan de lengte van het array waarheen het wordt gekopieerd je de data voorbij het einde van de array kwijt bent. Er is dan ook nog een andere mogelijkheid zodat je ook hier geen data verlies hebt.

#include <iostream.h>
#include <string.h>

int main()
{
  char str1[20] ="Hello world"; 
  char str2[20];
  
  cin.get(str1, 19);
  
  strncpy(str2,str1,19);
  str2[strlen(str1)] = '\0';
  
  cout << str1 <<"\n";
  cout << str2;
  
  return 0;
}
Precies hetzelfde als het vorige voorbeeld alleen nu met strncpy waar je de maximale lengte van de string kunt instellen. De regel die na strncpy komt is hier eigenlijk niet nodig maar ik laat het je maar even zien als voorbeeld. Zoals je weet moet elke string afgesloten worden door een null teken en dat is precies wat ik hier doe. Ik bepaal eerst de lengte van str1 en die waarde staat dus in str2 bijvoorbeeld str2[17] en daar zet ik dan zelf het null teken neer.

Dit is alles wat je moet weten over strings

Succes

Vampire,