C structuri și indicatoare (cu exemple)

În acest tutorial, veți învăța să utilizați indicii pentru a accesa membrii structurilor din programarea C. De asemenea, veți învăța să alocați dinamic memoria tipurilor de structuri.

Înainte de a afla cum pot fi utilizate pointerele cu structurile, asigurați-vă că verificați aceste tutoriale:

  • C Pointeri
  • C struct

C Indicatori pentru struct

Iată cum puteți crea indicii pentru structuri.

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

Aici, ptr este un indicator către struct.

Exemplu: Accesați membrii utilizând Pointer

Pentru a accesa membrii unei structuri folosind pointeri, folosim ->operatorul.

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

În acest exemplu, adresa persoanei1 este stocată în indicatorul personPtr folosind personPtr = &person1;.

Acum, puteți accesa membrii person1 folosind personPtrindicatorul.

Apropo,

  • personPtr->age este echivalent cu (*personPtr).age
  • personPtr->weight este echivalent cu (*personPtr).weight

Alocarea dinamică a memoriei structurilor

Înainte de a continua această secțiune, vă recomandăm să verificați alocarea dinamică a memoriei C.

Uneori, numărul de variabile struct pe care le-ați declarat poate fi insuficient. Poate fi necesar să alocați memorie în timpul rulării. Iată cum puteți realiza acest lucru în programarea C.

Exemplu: Alocarea dinamică a memoriei structurilor

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

Când rulați programul, ieșirea va fi:

 Introduceți numărul de persoane: 2 Introduceți prenumele și, respectiv, vârsta: Harry 24 Introduceți numele și respectiv vârsta: Gary 32 Afișarea informațiilor: Nume: Harry Vârsta: 24 Nume: Gary Vârsta: 32

În exemplul de mai sus, se creează un număr de variabile struct în care n este introdus de utilizator.

Pentru a aloca memoria pentru un număr de persoane struct, am folosit,

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

Apoi, am folosit indicatorul ptr pentru a accesa elementele persoanei.

Articole interesante...