Κατηγορία αποθήκευσης Γ

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

Κάθε μεταβλητή στον προγραμματισμό C έχει δύο ιδιότητες: τύπος και κατηγορία αποθήκευσης.

Ο τύπος αναφέρεται στον τύπο δεδομένων μιας μεταβλητής. Και, η κλάση αποθήκευσης καθορίζει το εύρος, την ορατότητα και τη διάρκεια ζωής μιας μεταβλητής.

Υπάρχουν 4 τύποι κατηγορίας αποθήκευσης:

  1. αυτόματο
  2. εξωτερικός
  3. στατικός
  4. κανω ΕΓΓΡΑΦΗ

Τοπική μεταβλητή

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

Ας πάρουμε ένα παράδειγμα.

 #include int main(void) ( for (int i = 0; i < 5; ++i) ( printf("C programming"); ) // Error: i is not declared at this point printf("%d", i); return 0; )

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

Ας πάρουμε ένα άλλο παράδειγμα.

  int main() ( int n1; // n1 is a local variable to main() ) void func() ( int n2; // n2 is a local variable to func() ) 

Στο παραπάνω παράδειγμα, το n1 είναι τοπικό main()και το n2 είναι τοπικό func().

Αυτό σημαίνει ότι δεν μπορείτε να αποκτήσετε πρόσβαση στη μεταβλητή n1 μέσα, func()καθώς υπάρχει μόνο μέσα main(). Ομοίως, δεν μπορείτε να αποκτήσετε πρόσβαση στη μεταβλητή n2 μέσα, main()καθώς υπάρχει μόνο μέσα func().

Καθολική μεταβλητή

Οι μεταβλητές που δηλώνονται εκτός όλων των συναρτήσεων είναι γνωστές ως εξωτερικές ή καθολικές μεταβλητές. Είναι προσβάσιμα από οποιαδήποτε λειτουργία μέσα στο πρόγραμμα.

Παράδειγμα 1: Καθολική μεταβλητή

 #include void display(); int n = 5; // global variable int main() ( ++n; display(); return 0; ) void display() ( ++n; printf("n = %d", n); ) 

Παραγωγή

 n = 7

Ας υποθέσουμε, μια παγκόσμια μεταβλητή δηλώνεται στο file1. Εάν προσπαθήσετε να χρησιμοποιήσετε αυτήν τη μεταβλητή σε διαφορετικό αρχείο file2, ο μεταγλωττιστής θα παραπονεθεί. Για να λυθεί αυτό το πρόβλημα, η λέξη-κλειδί externχρησιμοποιείται για file2να δείξει ότι η εξωτερική μεταβλητή δηλώνεται σε άλλο αρχείο.

Καταχώριση μεταβλητής

Η registerλέξη-κλειδί χρησιμοποιείται για να δηλώσει μεταβλητές μητρώου. Το μητρώο μεταβλητών έπρεπε να είναι ταχύτερο από τις τοπικές μεταβλητές.

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

Εκτός αν εργάζεστε σε ενσωματωμένα συστήματα όπου γνωρίζετε πώς να βελτιστοποιήσετε τον κώδικα για τη δεδομένη εφαρμογή, δεν υπάρχει χρήση μεταβλητών μητρώου.

Στατική μεταβλητή

Μια στατική μεταβλητή δηλώνεται χρησιμοποιώντας τη staticλέξη-κλειδί. Για παράδειγμα;

 στατικό int i;

Η τιμή μιας στατικής μεταβλητής παραμένει μέχρι το τέλος του προγράμματος.

Παράδειγμα 2: Στατική μεταβλητή

 #include void display(); int main() ( display(); display(); ) void display() ( static int c = 1; c += 5; printf("%d ",c); ) 

Παραγωγή

 6 11

Κατά την πρώτη κλήση συνάρτησης, η τιμή του c αρχικοποιείται σε 1. Η τιμή της αυξάνεται κατά 5. Τώρα, η τιμή του c είναι 6, η οποία εκτυπώνεται στην οθόνη.

Κατά τη δεύτερη κλήση λειτουργίας, το c δεν αρχικοποιείται ξανά στο 1. Είναι επειδή το c είναι μια στατική μεταβλητή. Η τιμή c αυξάνεται κατά 5. Τώρα, η τιμή της θα είναι 11, η οποία εκτυπώνεται στην οθόνη.

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