C-rakenteet ja osoittimet (esimerkkien kanssa)

Tässä opetusohjelmassa opit käyttämään osoittimia C-ohjelmoinnin jäsenten käyttämiseen. Opit myös varaamaan dynaamisesti rakennetyyppien muistin.

Ennen kuin opit osoittimien käyttämisestä rakenteiden kanssa, tarkista nämä oppaat:

  • C Osoittimet
  • C rakenne

C Rakenteen osoittimet

Näin voit luoda viitteitä rakenteisiin.

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

Tässä ptr on osoitin struct.

Esimerkki: Käytä jäseniä osoittimen avulla

Pääset rakenteen jäseniin osoittimilla käyttämällä ->operaattoria.

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

Tässä esimerkissä henkilön1 osoite tallennetaan personPtr-osoittimeen käyttämällä personPtr = &person1;.

Nyt voit käyttää person1: n jäseniä personPtrosoittimen avulla.

Muuten,

  • personPtr->age vastaa (*personPtr).age
  • personPtr->weight vastaa (*personPtr).weight

Dynaaminen muistin allokointi rakenteille

Ennen kuin jatkat tätä osaa, suosittelemme, että tarkistat C-dynaamisen muistin varauksen.

Joskus ilmoittamiesi rakennemuuttujien määrä voi olla riittämätön. Saatat joutua varaamaan muistia ajon aikana. Näin voit saavuttaa tämän C-ohjelmoinnissa.

Esimerkki: Rakenteiden dynaaminen muistin allokointi

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

Kun suoritat ohjelmaa, tulos on:

 Anna henkilöiden lukumäärä: 2 Anna etunimi ja ikä: Harry 24 Anna etunimi ja ikä: Gary 32 Näytetään tiedot: Nimi: Harry Ikä: 24 Nimi: Gary Ikä: 32

Edellä olevassa esimerkissä luodaan n määrä rakennemuuttujia, joissa käyttäjä syöttää n.

Määritimme muistin n rakenteellisen henkilön lukumäärälle,

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

Sitten käytimme ptr-osoitinta päästäksesi henkilön elementteihin.

Mielenkiintoisia artikkeleita...