C-structuren en aanwijzers
C-structuren en aanwijzers
In deze tutorial leer je om pointers te gebruiken om toegang te krijgen tot leden van structs in C-programmering. Je leert ook om het geheugen van structtypes dynamisch toe te wijzen.
Voordat je leert hoe aanwijzers kunnen worden gebruikt met structs, moet je deze tutorials bekijken:
- C-aanwijzers
- C-struct
C Pointers om te structureren
Hier leest u hoe u verwijzingen naar structs kunt maken.
struct name {
member1;
member2;
.
.
};
int main()
{
struct name *ptr, Harry;
}
Hier, ptr is een verwijzing naar struct
.
Voorbeeld:toegang krijgen tot leden met Pointer
Om toegang te krijgen tot leden van een structuur met behulp van pointers, gebruiken we de ->
telefoniste.
#include <stdio.h>
struct person
{
int age;
float weight;
};
int main()
{
struct person *personPtr, person1;
personPtr = &person1;
printf("Enter age: ");
scanf("%d", &personPtr->age);
printf("Enter weight: ");
scanf("%f", &personPtr->weight);
printf("Displaying:\n");
printf("Age: %d\n", personPtr->age);
printf("weight: %f", personPtr->weight);
return 0;
}
In dit voorbeeld is het adres van person1 wordt opgeslagen in de personPtr aanwijzer met personPtr = &person1;
.
Nu heb je toegang tot de leden van person1 met behulp van de personPtr
aanwijzer.
Trouwens,
personPtr->age
is gelijk aan(*personPtr).age
personPtr->weight
is gelijk aan(*personPtr).weight
Dynamische geheugentoewijzing van structs
Voordat u doorgaat met dit gedeelte, raden we u aan om de dynamische geheugentoewijzing van C te controleren.
Soms kan het aantal structvariabelen dat u hebt opgegeven onvoldoende zijn. Mogelijk moet u tijdens runtime geheugen toewijzen. Hier leest u hoe u dit kunt bereiken in C-programmering.
Voorbeeld:dynamische geheugentoewijzing van structs
#include <stdio.h>
#include <stdlib.h>
struct person {
int age;
float weight;
char name[30];
};
int main()
{
struct person *ptr;
int i, n;
printf("Enter the number of persons: ");
scanf("%d", &n);
// allocating memory for n numbers of struct person
ptr = (struct person*) malloc(n * sizeof(struct person));
for(i = 0; i < n; ++i)
{
printf("Enter first name and age respectively: ");
// To access members of 1st struct person,
// ptr->name and ptr->age is used
// To access members of 2nd struct person,
// (ptr+1)->name and (ptr+1)->age is used
scanf("%s %d", (ptr+i)->name, &(ptr+i)->age);
}
printf("Displaying Information:\n");
for(i = 0; i < n; ++i)
printf("Name: %s\tAge: %d\n", (ptr+i)->name, (ptr+i)->age);
return 0;
}
Wanneer u het programma uitvoert, is de uitvoer:
Enter the number of persons: 2 Enter first name and age respectively: Harry 24 Enter first name and age respectively: Gary 32 Displaying Information: Name: Harry Age: 24 Name: Gary Age: 32
In het bovenstaande voorbeeld, n aantal structvariabelen wordt aangemaakt waarbij n wordt ingevoerd door de gebruiker.
Het geheugen toewijzen voor n aantal structeur , we gebruikten,
ptr = (struct person*) malloc(n * sizeof(struct person));
Vervolgens gebruikten we de ptr pointer voor toegang tot elementen van person .
C Taal