Linux C Programmeren Handleiding Deel 7: Arrays

We hebben het dus al gehad over het concept variabelen in C programmeren(hier en hier). Om snel op te frissen is een variabele iets dat een waarde van een bepaald type kan vasthouden – het kan een geheel getal zijn, een teken, of zelfs een drijvende komma. Er is echter één beperking van variabelen: ze kunnen op elk moment maar één enkele waarde vasthouden.

Dit betekent dat als je meerdere waarden wilt vasthouden, je te maken krijgt met evenveel variabelen. Wil je bijvoorbeeld dat een programma 10 gehele waarden van de gebruiker aanneemt en ze dan uitvoert, dan schrijf je het ofwel op deze manier:

#include <stdio.h>

int main()
{
int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;
printf("Enter 10 integer values\n");
scanf("%d",&a);
scanf("%d",&b);
scanf("%d",&c);
scanf("%d",&d);
scanf("%d",&e);
scanf("%d",&f);
scanf("%d",&g);
scanf("%d",&h);
scanf("%d",&i);
scanf("%d",&j);

printf("You entered the following values:\n");
printf("%d\n",a);
printf("%d\n",b);
printf("%d\n",c);
printf("%d\n",d);
printf("%d\n",e);
printf("%d\n",f);
printf("%d\n",g);
printf("%d\n",h);
printf("%d\n",i);
printf("%d\n",j);


return 0;
}

Of op de volgende manier:

#include <stdio.h>

int main()
{
int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;

printf("Enter 10 integer values\n");
scanf("%d %d %d %d %d %d %d %d %d %d",&a,&b,&c,&d,&e,&f,&g,&h,&i,&j);

printf("You entered the following values:\n");
printf("%d %d %d %d %d %d %d %d %d %d\n",a,b,c,d,e,f,g,h,i,j);


return 0;
}

De tweede aanpak is misschien iets beter als je vergelijkt in termen van geschreven regels code, maar er is nog steeds een betere manier, en dat is het gebruik van een integer array.

Ja, als er een vereiste is om meerdere waarden van hetzelfde type te bewaren, dan moet je kiezen voor een array. Hier zie je hoe een integer array die 10 waarden kan bevatten wordt gedefinieerd:

int arr[10]

Hier verwijst dus ‘int’ naar het type waarden dat array ‘arr’ zal opslaan. Het getal 10 tussen vierkante haken vertelt dat de capaciteit van ‘arr’ 10 waarden is. Nu volgt hier een stukje code dat deze array gebruikt:

#include <stdio.h>

int main()
{
int arr[10],i;

printf("Enter 10 integer values\n");

for(i=0;i<10;i++)
scanf("%d",&(arr[i]));

printf("You entered the following values:\n");

for(i=0;i<10;i++)
printf("%d\n",arr[i]);


return 0;
}

Merk op dat we de functies scanf en printf al besproken hebben in een van onze eerdere handleidingen, dus je kunt naar die artikelen verwijzen voor het geval je er meer over wilt weten.

Terugkomend op arrays, je hebt vast opgemerkt dat de ‘for’ lus in de code hierboven begint met i=0. Dat komt omdat array subscripts (het getal binnen vierkante haken) altijd bij nul beginnen. Dus hier, in ons geval, verwijst arr[0] naar de eerste door de gebruiker ingevoerde waarde, arr[1] naar de tweede waarde, enzovoort tot arr[9] dat naar de 10e waarde verwijst.

Het is ook de moeite waard te vermelden dat je gemakkelijk toegang kunt krijgen tot het geheugenadres van elke waarde die in de array is opgeslagen. Dit kan met behulp van de array naam, die in dit geval ‘arr’ is. Dus als je in de code alleen ‘arr’ gebruikt, dan is dat niets anders dan het geheugenadres van het eerste element.

Evenzo, als je het geheugenadres van het tweede element wilt benaderen, gebruik je gewoon ‘arr+1’. Voor het derde element gebruik je ‘arr+2’, enzovoort. Het volgende stukje code en de uitvoer ervan zouden je een beter idee moeten geven.

#include <stdio.h>

int main()
{
int arr[10],i;

printf("The address of first and second values are: %u %u\n", arr, arr+1);

return 0;
}

En hier is de uitvoer:

The address of first and second values are: 2904035888 2904035892

Zoals je ziet is er een verschil van 4 bytes in deze adressen – dat komt omdat een integer waarde op mijn systeem 4 bytes in beslag neemt.

Conclusie

In deze tutorial hebben we de grondbeginselen van arrays besproken. Merk op dat we alleen een voorbeeld gaven van een integer array. Je kunt ook arrays van andere typen hebben, zoals karakters. Probeer de voorbeelden uit die we in deze handleiding gebruikt hebben, en laat het ons weten in het commentaarveld hieronder als je twijfels of vragen hebt.