C structs og pegepinde (med eksempler)

I denne vejledning lærer du at bruge pegepinde til at få adgang til medlemmer af strukturer i C-programmering. Du lærer også at dynamisk tildele hukommelse af strukturtyper.

Før du lærer om, hvordan markører kan bruges med strukturer, skal du sørge for at kontrollere disse vejledninger:

  • C markører
  • C struct

C Tip til struktur

Her er hvordan du kan oprette markører til strukturer.

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

Her er ptr en markør til struct.

Eksempel: Få adgang til medlemmer ved hjælp af Pointer

For at få adgang til medlemmer af en struktur ved hjælp af markører bruger vi ->operatøren.

 #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; )

I dette eksempel gemmes adressen på person1 i personPtr-markøren ved hjælp af personPtr = &person1;.

Nu kan du få adgang til medlemmerne af person1 ved hjælp af personPtrmarkøren.

I øvrigt,

  • personPtr->age svarer til (*personPtr).age
  • personPtr->weight svarer til (*personPtr).weight

Dynamisk hukommelsesallokering af strukturer

Inden du fortsætter med dette afsnit, anbefaler vi dig at kontrollere C dynamisk hukommelsestildeling.

Nogle gange kan antallet af strukturvariabler, du har deklareret, være utilstrækkeligt. Det kan være nødvendigt at du tildeler hukommelse under kørselstiden. Her er hvordan du kan opnå dette i C-programmering.

Eksempel: Dynamisk hukommelsesallokering af strukturer

 #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; ) 

Når du kører programmet, vil output være:

 Indtast antallet af personer: 2 Indtast henholdsvis fornavn og alder: Harry 24 Indtast henholdsvis fornavn og alder: Gary 32 Viser oplysninger: Navn: Harry Alder: 24 Navn: Gary Alder: 32

I ovenstående eksempel oprettes n antal strukturvariabler, hvor n indtastes af brugeren.

For at tildele hukommelsen til n antal strukturerede personer brugte vi,

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

Derefter brugte vi ptr-markøren til at få adgang til personelementer.

Interessante artikler...