C Structs: Doorgeven, retourneren en referentie-afhandeling onder de knie krijgen
C Structuren: Doorgeven, retourneren en referentie-afhandeling
In C-programmeren stellen structuren je in staat gerelateerde data in één entiteit te groeperen. Deze gids begeleidt je door drie essentiële operaties met structs: ze doorgeven aan functies, ze retourneren uit functies, en ze per referentie manipuleren. Elke sectie bevat een beknopte uitleg en een werkend voorbeeld om je begrip te versterken.
Structs doorgeven aan functies
Net als ingebouwde typen kunnen struct-variabelen direct aan een functie worden doorgegeven. Het is handig om eerst C structuren, C functies en user-defined functions te herhalen.
- C structuren
- C functies
- User-defined Function
Het volgende voorbeeld demonstreert hoe je een struct student doorgeeft aan een functie die de inhoud print.
#include <stdio.h>
struct student {
char name[50];
int age;
};
// Functieprototype
void display(struct student s);
int main() {
struct student s1;
printf("Voer naam in: ");
scanf("%[^ ]%%*c", s1.name); // lees tot newline
printf("Voer leeftijd in: ");
scanf("%d", &s1.age);
display(s1); // geef struct door aan functie
return 0;
}
void display(struct student s) {
printf("\nInformatie weergeven\n");
printf("Naam: %s", s.name);
printf("\nLeeftijd: %d", s.age);
}
Output
Voer naam in: Bond Voer leeftijd in: 13 Informatie weergeven Naam: Bond Leeftijd: 13
Een struct retourneren uit een functie
Functies kunnen volledige structs retourneren, wat een schone scheiding van dataverzameling en -verwerking mogelijk maakt. Het onderstaande voorbeeld verzamelt studentinformatie binnen een functie en retourneert het aan main.
#include <stdio.h>
struct student {
char name[50];
int age;
};
// Functieprototype
struct student getInformation();
int main() {
struct student s;
s = getInformation();
printf("\nInformatie weergeven\n");
printf("Naam: %s", s.name);
printf("\nLeeftijd: %d", s.age);
return 0;
}
struct student getInformation() {
struct student s1;
printf("Voer naam in: ");
scanf("%[^ ]%%*c", s1.name);
printf("Voer leeftijd in: ");
scanf("%d", &s1.age);
return s1;
}
Het return-type van de functie matcht de struct die het retourneert, wat type-veiligheid en helderheid garandeert.
Een struct per referentie doorgeven
Als je een functie nodig hebt die een struct wijzigt, geef dan het adres (d.w.z. een pointer) door. Dit is analoog aan het per referentie doorgeven van ingebouwde typen. Het volgende voorbeeld telt twee complexe getallen op en slaat het resultaat op via een pointer.
#include <stdio.h>
typedef struct Complex {
float real;
float imag;
} complex;
void addNumbers(complex c1, complex c2, complex *result);
int main() {
complex c1, c2, result;
printf("Voor eerste getal,\n");
printf("Voer reëel deel in: ");
scanf("%f", &c1.real);
printf("Voer imaginair deel in: ");
scanf("%f", &c1.imag);
printf("Voor tweede getal,\n");
printf("Voer reëel deel in: ");
scanf("%f", &c2.real);
printf("Voer imaginair deel in: ");
scanf("%f", &c2.imag);
addNumbers(c1, c2, &result);
printf("\nresult.real = %.1f\n", result.real);
printf("result.imag = %.1f", result.imag);
return 0;
}
void addNumbers(complex c1, complex c2, complex *result) {
result->real = c1.real + c2.real;
result->imag = c1.imag + c2.imag;
}
Output
Voor eerste getal, Voer reëel deel in: 1.1 Voer imaginair deel in: -2.4 Voor tweede getal, Voer reëel deel in: 3.4 Voer imaginair deel in: -3.2 result.real = 4.5 result.imag = -5.6
Omdat result per referentie wordt doorgegeven, beïnvloeden wijzigingen binnen addNumbers direct de variabele in main.
Door deze technieken onder de knie te krijgen, kun je meer modulare, leesbare en efficiënte C-code schrijven die de volle kracht van structuren benut.
C Taal
- Elektrische Transformatoren Uitgelegd: Functie, Ontwerp en Industriële Toepassingen
- De 15 Belangrijkste Onderdelen van een Draaibank en Hun Functies
- C# structs: definitie, gebruik en verschillen met classes
- C++ Friend Functies en Friend Classes: Toegangscontrole Beheersen
- C Structs onder de knie krijgen: Definitie, variabelen, toegang & geavanceerde voorbeelden
- C Structs en Pointers onder de knie krijgen: Een praktische gids
- C-programmastructuur begrijpen: Een beginnergids
- C-datatypes begrijpen: Een complete gids
- C-constanten en literals: Types, gebruik en best practices
- C-functies: Structuur, declaratie, aanroep en argumenten
- C++ Overloading Beheersen: Functies & Operators Uitgelegd