Linux C Programmeren Handleiding Deel 26 – Structuren en Functies

In een van onze vorige commandoregel handleidingen hebben we het concept van Structures aangestipt. Aan de hand van gemakkelijk te begrijpen voorbeelden bespraken we basiszaken als wat zijn structuren en waarom zijn ze nodig. Daarop voortbordurend bespreken we in deze handleiding hoe structuren en functies samen gebruikt kunnen worden.

Structuren en functies in de programmeertaal C

Laten we, voor we beginnen, even snel opfrissen hoe een structuur gedeclareerd wordt. Hier is een voorbeeld:

struct emp_details {

int emp_code;
int emp_age;

};

Hier betekent het struct sleutelwoord – dat verplicht is als je een structuur in C definieert – dus het begin van de declaratie. Het wordt gevolgd door een tag, of je kunt zeggen de naam van de structuur. Dan heb je binnen haakjes twee integer variabelen, die samen gegroepeerd zijn als deel van deze structuur.

Om deze structuur te gebruiken, moet je eerst zijn instantie of object definiƫren. Dat kun je op de volgende manier doen:

emp_details obj;

En dan kunnen de structuurleden op de volgende manier benaderd worden:

obj.emp_code
obj.emp_age

Nu we bij functies komen, een functie kan zowel structuren teruggeven als structuren accepteren in de vorm van argumenten. Hier is een voorbeeld:

#include <stdio.h>

struct emp_details {

int emp_code;
int emp_age;

};

struct emp_details fill(int code, int age)
{
struct emp_details obj;
obj.emp_code = code;
obj.emp_age = age;

return obj;
}

int main()
{
int x,y;

printf("Enter employee code: ");
scanf("%d", &x);

printf("\n Enter employee age: ");
scanf("%d", &y);

struct emp_details new_obj;

new_obj = fill(x,y);

printf("\n The employee code and age you entered are: %d and %d", new_obj.emp_code, new_obj.emp_age);

return 0;
}

In dit voorbeeld hebben we dus een functie ‘fill’ die twee gehele getallen aanneemt, ze behandelt als code en leeftijd, op basis van deze informatie een structuur vult, en de structuur als waarde teruggeeft aan de aanroeper van de functie.

Nu kunnen, zoals ik eerder in een uitspraak hierboven al zei, structuren ook als functie-argumenten worden doorgegeven. Hieronder volgt een voorbeeld, waarbij de functie ‘fill’ een ‘emp_details’ structuur als argument accepteert.

#include <stdio.h>

struct emp_details {

int emp_code;
int emp_age;

};

void fill(struct emp_details obj)
{
printf("\n The employee code and age you entered are: %d and %d", obj.emp_code, obj.emp_age);
}

int main()
{
int x,y;

printf("Enter employee code: ");
scanf("%d", &x);

printf("\n Enter employee age: ");
scanf("%d", &y);

struct emp_details new_obj;
new_obj.emp_code = x;
new_obj.emp_age = y;

fill(new_obj);

return 0;
}

En hier is de uitvoer in mijn geval:

Enter employee code: 36 
Enter employee age: 29

The employee code and age you entered are: 36 and 29

Verder lopend kunnen er, net als gewone variabelen, arrays, en meer, ook verwijzingen naar structuren zijn. Hier is een voorbeeld:

struct emp_details *ptr;

Zoals altijd komen wijzers van pas als de grootte van de structuur groot is, en je hem als argument naar een functie stuurt. Idealiter is hier hoe je structuurvariabelen kunt benaderen via pointer objecten:

(*ptr).emp_code
(*ptr).emp_age

Maar omwille van de eenvoud kun je in C * en . weglaten en in plaats daarvan ‘->’ gebruiken. Hieronder volgt een voorbeeld:

ptr->emp_code
ptr->emp_age 

Hier is een voorbeeld dat gebruik maakt van structuur-aanwijzers:

#include <stdio.h>

struct emp_details {

int emp_code;
int emp_age;

};

void fill(struct emp_details *obj)
{
printf("\n The employee code and age you entered are: %d and %d", obj->emp_code, obj->emp_age);
}

int main()
{
int x,y;

printf("Enter employee code: ");
scanf("%d", &x);

printf("\n Enter employee age: ");
scanf("%d", &y);

struct emp_details new_obj;
new_obj.emp_code = x;
new_obj.emp_age = y;

fill(&new_obj);

return 0;
}

Hoewel dit hetzelfde voorbeeld is dat we eerder gebruikten, zijn de veranderingen – omdat we nu een structuur aanwijzer gebruiken – vet gemarkeerd.

Conclusie

In deze tutorial hebben we ons begrip van structuren uitgebreid door te bespreken hoe functies en structuren samen gebruikt kunnen worden. Je wordt aangemoedigd om de voorbeelden die we hier gebruikten op je lokale systeem uit te proberen. Laat bij twijfel of vragen hieronder een reactie achter.