C szerkezetek és mutatók (példákkal)

Ebben az oktatóanyagban megtanulhatja használni a mutatókat a struktúrák tagjainak eléréséhez a C programozásban. Azt is megtanulja, hogyan kell dinamikusan felosztani a struktúra típusainak memóriáját.

Mielőtt megtudná, hogyan használhatók a mutatók a struktúrákkal, ellenőrizze ezeket az oktatóanyagokat:

  • C Mutatók
  • C struktúra

C Mutatók a struktúrára

Így hozhat létre mutatókat a struktúrákra.

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

Itt a ptr mutató struct.

Példa: Hozzáférés a tagokhoz a mutató segítségével

A struktúra tagjainak mutatóval történő eléréséhez az ->operátort használjuk .

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

Ebben a példában a person1 címet a personPtr mutató segítségével tároljuk personPtr = &person1;.

Most a point1 segítségével érheti el a person1 tagjait personPtr.

Apropó,

  • personPtr->age egyenértékű (*personPtr).age
  • personPtr->weight egyenértékű (*personPtr).weight

A struktúrák dinamikus memóriakiosztása

Mielőtt folytatná ezt a részt, javasoljuk, hogy ellenőrizze a C dinamikus memória-allokációt.

Előfordulhat, hogy a deklarált struktúraváltozók száma nem elegendő. Előfordulhat, hogy a futás során memóriát kell lefoglalnia. Így érheti el ezt a C programozásban.

Példa: Struktúrák dinamikus memóriakiosztása

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

A program futtatásakor a kimenet a következő lesz:

 Írja be a személyek számát: 2 Írja be a keresztnevet és az életkort: Harry 24 Írja be a keresztnevet és az életkort: Gary 32 Információk megjelenítése: Név: Harry Kor: 24 Név: Gary Kor: 32

A fenti példában n számú strukturális változó jön létre, ahol n a felhasználó adja meg.

A memória kiosztásához n strukturált személy számára azt használtuk,

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

Ezután a ptr mutatót használtuk a személy elemeihez.

érdekes cikkek...