Î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 personPtr
indicatorul.
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.