C structs en pointers (met voorbeelden)

In deze tutorial leer je om pointers te gebruiken om toegang te krijgen tot leden van structs in C-programmering. Je leert ook om dynamisch geheugen van struct-typen toe te wijzen.

Voordat u leert hoe pointers met structs kunnen worden gebruikt, moet u deze tutorials raadplegen:

  • C Pointers
  • C struct

C Verwijzing naar struct

Hier leest u hoe u verwijzingen naar structs kunt maken.

 struct name ( member1; member2;… ); int main() ( struct name *ptr, Harry; )

Hier is ptr een verwijzing naar struct.

Voorbeeld: toegang tot leden met Pointer

Om toegang te krijgen tot leden van een structuur met behulp van pointers, gebruiken we de ->operator.

 #include 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:"); printf("Age: %d", personPtr->age); printf("weight: %f", personPtr->weight); return 0; )

In dit voorbeeld wordt het adres van person1 opgeslagen in de personPtr-pointer met personPtr = &person1;.

Nu hebt u met de personPtraanwijzer toegang tot de leden van person1 .

Trouwens,

  • personPtr->age is gelijk aan (*personPtr).age
  • personPtr->weight is gelijk aan (*personPtr).weight

Dynamische geheugentoewijzing van structs

Voordat u doorgaat met deze sectie, raden we u aan om de dynamische geheugentoewijzing C te controleren.

Soms is het aantal struct-variabelen dat u heeft opgegeven mogelijk onvoldoende. Mogelijk moet u tijdens runtime geheugen toewijzen. Hier leest u hoe u dit kunt bereiken in C-programmering.

Voorbeeld: dynamische geheugentoewijzing van structs

 #include #include 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 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:"); for(i = 0; i name, (ptr+i)->age); return 0; ) 

Wanneer u het programma uitvoert, is de uitvoer:

 Voer het aantal personen in: 2 Voer respectievelijk voornaam en leeftijd in: Harry 24 Voer respectievelijk voornaam en leeftijd in: Gary 32 Informatie weergeven: Naam: Harry Leeftijd: 24 Naam: Gary Leeftijd: 32

In het bovenstaande voorbeeld wordt n aantal struct-variabelen gemaakt waarbij n wordt ingevoerd door de gebruiker.

Om het geheugen voor n aantal struct-personen toe te wijzen, gebruikten we,

 ptr = (struct person*) malloc(n * sizeof(struct person));

Vervolgens hebben we de ptr-aanwijzer gebruikt om toegang te krijgen tot elementen van een persoon.

Interessante artikelen...