C δομές και δείκτες (με παραδείγματα)

Σε αυτό το σεμινάριο, θα μάθετε να χρησιμοποιείτε δείκτες για πρόσβαση σε μέλη δομών στον προγραμματισμό Γ. Θα μάθετε επίσης να κατανέμετε δυναμικά τη μνήμη των τύπων δομής.

Πριν μάθετε πώς μπορούν να χρησιμοποιηθούν δείκτες με δομές, φροντίστε να ελέγξετε αυτά τα σεμινάρια:

  • C Δείκτες
  • C δομή

C Δείκτες προς δομή

Δείτε πώς μπορείτε να δημιουργήσετε δείκτες σε δομές.

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

Εδώ, το ptr είναι δείκτης struct.

Παράδειγμα: Πρόσβαση σε μέλη χρησιμοποιώντας το δείκτη

Για πρόσβαση στα μέλη μιας δομής χρησιμοποιώντας δείκτες, χρησιμοποιούμε τον ->τελεστή.

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

Σε αυτό το παράδειγμα, η διεύθυνση του person1 αποθηκεύεται στον δείκτη personPtr χρησιμοποιώντας personPtr = &person1;.

Τώρα, μπορείτε να αποκτήσετε πρόσβαση στα μέλη του ατόμου1 χρησιμοποιώντας το personPtrδείκτη.

Παρεμπιπτόντως,

  • personPtr->age είναι ισοδύναμο με (*personPtr).age
  • personPtr->weight είναι ισοδύναμο με (*personPtr).weight

Δυναμική κατανομή μνήμης των δομών

Πριν προχωρήσετε σε αυτήν την ενότητα, σας συνιστούμε να ελέγξετε την κατανομή δυναμικής μνήμης C.

Μερικές φορές, ο αριθμός των μεταβλητών δομής που δηλώσατε μπορεί να είναι ανεπαρκής. Ίσως χρειαστεί να εκχωρήσετε μνήμη κατά τη διάρκεια του χρόνου εκτέλεσης. Δείτε πώς μπορείτε να το επιτύχετε στον προγραμματισμό Γ.

Παράδειγμα: Δυναμική κατανομή μνήμης των δομών

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

Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:

 Εισαγάγετε τον αριθμό των ατόμων: 2 Εισαγάγετε το όνομα και την ηλικία αντίστοιχα: Χάρι 24 Εισαγάγετε το όνομα και την ηλικία αντίστοιχα: Gary 32 Εμφάνιση πληροφοριών: Όνομα: Χάρι Ηλικία: 24 Όνομα: Gary Ηλικία: 32

Στο παραπάνω παράδειγμα, δημιουργείται n αριθμός δομητικών μεταβλητών όπου το n εισάγεται από τον χρήστη.

Για να εκχωρήσουμε τη μνήμη για n αριθμό δομικών ατόμων, χρησιμοποιήσαμε,

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

Στη συνέχεια, χρησιμοποιήσαμε το δείκτη ptr για πρόσβαση σε στοιχεία του ατόμου.

ενδιαφέροντα άρθρα...