I den här handledningen lär du dig att använda pekare för att komma åt medlemmar av structs i C-programmering. Du lär dig också att dynamiskt fördela minne av strukturtyper.
Innan du lär dig om hur pekare kan användas med strukturer, se till att kontrollera dessa handledning:
- C Pekare
- C struct
C Pekare till struktur
Så här kan du skapa pekare till structts.
struct name ( member1; member2;… ); int main() ( struct name *ptr, Harry; )
Här är ptr en pekare till struct
.
Exempel: Åtkomst till medlemmar med Pointer
För att komma åt medlemmar i en struktur med hjälp av pekare använder 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 detta exempel lagras adressen till person1 i personPtr-pekaren med personPtr = &person1;
.
Nu kan du komma åt medlemmarna i person1 med personPtr
pekaren.
Förresten,
personPtr->age
är ekvivalent med(*personPtr).age
personPtr->weight
är ekvivalent med(*personPtr).weight
Dynamisk minnesallokering av struts
Innan du fortsätter med detta avsnitt rekommenderar vi att du kontrollerar C-dynamisk minnetilldelning.
Ibland kan antalet strukturvariabler som du förklarade vara otillräckligt. Du kan behöva allokera minne under körningstiden. Så här kan du uppnå detta i C-programmering.
Exempel: Dynamisk minnesallokering av struts
#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ör programmet blir resultatet:
Ange antal personer: 2 Ange förnamn respektive ålder: Harry 24 Ange förnamn respektive ålder: Gary 32 Visar information: Namn: Harry Ålder: 24 Namn: Gary Ålder: 32
I exemplet ovan skapas n antal strukturvariabler där n anges av användaren.
För att fördela minnet till n antal strukturerade personer använde vi,
ptr = (struct person*) malloc(n * sizeof(struct person));
Sedan använde vi ptr-pekaren för att komma åt personens element.