C strukture i pokazivači (s primjerima)

U ovom vodiču naučit ćete koristiti pokazivače za pristup članovima struktura u programiranju na C-u. Također ćete naučiti dinamički rasporediti memoriju tipova struct.

Prije nego što naučite kako se pokazivači mogu koristiti sa strukturama, svakako provjerite ove upute:

  • C Pokazatelji
  • C strukt

C Pokazatelji za strukturiranje

Evo kako možete stvoriti pokazivače na strukture.

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

Ovdje je ptr pokazivač na struct.

Primjer: Pristupite članovima pomoću pokazivača

Za pristup članovima strukture pomoću pokazivača koristimo ->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; )

U ovom se primjeru adresa person1 sprema u pokazivač personPtr pomoću personPtr = &person1;.

Sada članovima person1 možete pristupiti pomoću personPtrpokazivača.

Usput,

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

Dinamička alokacija struktura u memoriji

Prije nego što nastavite s ovim odjeljkom, preporučujemo vam da provjerite C dinamičku dodjelu memorije.

Ponekad je broj strukturnih varijabli koje ste proglasili možda nedovoljan. Možda ćete trebati dodijeliti memoriju tijekom izvođenja. Evo kako to možete postići u programiranju na C jeziku.

Primjer: Dinamička alokacija struktura u memoriji

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

Kada pokrenete program, izlaz će biti:

 Unesite broj osoba: 2 Unesite ime i dob: Harry 24 Unesite ime i dob: Gary 32 Podaci za prikaz: Ime: Harry Dob: 24 Ime: Gary Dob: 32

U gornjem primjeru stvara se n broja strukturnih varijabli tamo gdje korisnik unosi n.

Da bismo dodijelili memoriju za n broj strukturiranih osoba, koristili smo,

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

Zatim smo koristili ptr pokazivač za pristup elementima osobe.

Zanimljivi članci...