C štruktúry a ukazovatele (s príkladmi)

V tomto tutoriáli sa naučíte používať ukazovatele na prístup k členom štruktúr v programovaní C. Naučíte sa tiež dynamicky alokovať pamäť typov štruktúr.

Predtým, ako sa dozviete, ako je možné používať ukazovatele so štruktúrami, nezabudnite si prečítať tieto návody:

  • C Ukazovatele
  • C štruktúr

C Ukazovatele na štruktúr

Tu je príklad, ako môžete vytvárať ukazovatele na štruktúry.

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

Tu je ptr ukazovateľ na struct.

Príklad: Prístup k členom pomocou ukazovateľa

Na prístup k členom štruktúry pomocou ukazovateľov používame ->operátor.

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

V tomto príklade je adresa osoby1 uložená v ukazovateli personPtr pomocou personPtr = &person1;.

Teraz môžete pomocou personPtrukazovateľa získať prístup k členom osoby1 .

Mimochodom,

  • personPtr->age je ekvivalentné k (*personPtr).age
  • personPtr->weight je ekvivalentné k (*personPtr).weight

Dynamické prideľovanie pamäte štruktúr

Pred pokračovaním v tejto časti vám odporúčame skontrolovať dynamické pridelenie pamäte typu C.

Počet deklarovaných štruktúrnych premenných môže byť niekedy nedostatočný. Možno budete musieť prideliť pamäť počas behu. Tu je ukážka toho, ako to môžete dosiahnuť v programovaní v jazyku C.

Príklad: Dynamické prideľovanie pamäte štruktúr

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

Po spustení programu bude výstup:

 Zadajte počet osôb: 2 Zadajte meno a vek: Harry 24 Zadajte meno a vek: Gary 32 Zobrazené informácie: Meno: Harry Vek: 24 Meno: Gary Vek: 32

Vo vyššie uvedenom príklade sa vytvorí n počet štruktúrnych premenných, kde n je zadané používateľom.

Na pridelenie pamäte pre n počet štruktúrovaných osôb sme použili,

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

Potom sme pomocou ukazovateľa ptr sprístupnili prvky osoby.

Zaujímavé články...