|
auto *mercedes[10];
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 arraysTot 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, |