Strukture in kazalci (z primeri)

V tej vadnici se boste naučili uporabljati kazalce za dostop do članov struktur v programiranju C. Naučili se boste tudi dinamičnega dodeljevanja pomnilnika strukturnih tipov.

Preden se naučite, kako lahko kazalce uporabljate s strukturo, si oglejte te vadnice:

  • C Kazalci
  • C strukt

C Kazalniki na strukt

Tukaj je opisano, kako lahko ustvarite kazalce na strukture.

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

Tu je ptr kazalec na struct.

Primer: Dostop do članov z uporabo kazalca

Za dostop do članov strukture s pomočjo kazalcev uporabljamo ->operator.

 #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 tem primeru je naslov osebe1 shranjen v kazalcu personPtr z uporabo personPtr = &person1;.

Zdaj lahko s personPtrkazalcem dostopate do članov osebe1 .

Mimogrede,

  • personPtr->age je enakovredno (*personPtr).age
  • personPtr->weight je enakovredno (*personPtr).weight

Dinamična dodelitev pomnilnika struktur

Preden nadaljujete s tem razdelkom, priporočamo, da preverite dinamično dodeljevanje pomnilnika C.

Včasih je število spremenljivk struct, ki ste jih prijavili, morda nezadostno. Med izvajanjem boste morda morali dodeliti pomnilnik. Tukaj je opisano, kako lahko to dosežete s programiranjem C.

Primer: Dinamično dodeljevanje pomnilnikov struktur

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

Ko zaženete program, bo rezultat:

 Vnesite število oseb: 2 Vnesite ime in starost: Harry 24 Vnesite ime in starost: Gary 32 Prikaz informacij: Ime: Harry Starost: 24 Ime: Gary Starost: 32

V zgornjem primeru se ustvari n število spremenljivk struct, kjer n vnese uporabnik.

Za dodelitev pomnilnika za n število strukturne osebe smo uporabili,

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

Nato smo uporabili kazalec ptr za dostop do elementov osebe.

Zanimive Članki...