C-strikt och pekare (med exempel)

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 personPtrpekaren.

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.

Intressanta artiklar...