Κατηγορίες αποθήκευσης σε C: Auto, Extern, Static, Register (Παραδείγματα)

Τι είναι η Κατηγορία αποθήκευσης στο C;

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

  • Το μεταβλητό εύρος.
  • Η τοποθεσία όπου θα αποθηκευτεί η μεταβλητή.
  • Η αρχικοποιημένη τιμή μιας μεταβλητής.
  • Μια διάρκεια ζωής μιας μεταβλητής.
  • Ποιος μπορεί να έχει πρόσβαση σε μια μεταβλητή;

Έτσι, μια κλάση αποθήκευσης χρησιμοποιείται για να αναπαραστήσει τις πληροφορίες σχετικά με μια μεταβλητή.

ΣΗΜΕΊΩΣΗ: Μια μεταβλητή δεν συνδέεται μόνο με την α Τύπος δεδομένων, την αξία του αλλά και μια κατηγορία αποθήκευσης.

Ποιοι είναι οι τύποι τάξεων αποθήκευσης στο C;

Υπάρχουν συνολικά τέσσερις τύποι τυπικών κατηγοριών αποθήκευσης. Ο παρακάτω πίνακας αντιπροσωπεύει τις κατηγορίες αποθήκευσης στο C.

Κατηγορία αποθήκευσης Σκοπός
αυτόματη Είναι μια προεπιλεγμένη κλάση αποθήκευσης.
εξωτερικός Είναι μια καθολική μεταβλητή.
στατικός Είναι μια τοπική μεταβλητή που μπορεί να επιστρέψει μια τιμή ακόμα και όταν ο έλεγχος μεταφέρεται στην κλήση συνάρτησης.
κάντε ΕΓΓΡΑΦΗ Είναι μια μεταβλητή που αποθηκεύεται σε έναν Μητρώο.

Κατηγορία Auto Storage στο C

Οι μεταβλητές που ορίζονται χρησιμοποιώντας την κλάση αυτόματης αποθήκευσης ονομάζονται τοπικές μεταβλητές. Το Auto σημαίνει κατηγορία αυτόματης αποθήκευσης. Μια μεταβλητή ανήκει στην κατηγορία αυτόματης αποθήκευσης από προεπιλογή, εάν δεν προσδιορίζεται ρητά.

Το εύρος μιας αυτόματης μεταβλητής περιορίζεται μόνο με το συγκεκριμένο μπλοκ. Μόλις ο έλεγχος βγει από το μπλοκ, η πρόσβαση καταστρέφεται. Αυτό σημαίνει ότι μόνο το μπλοκ στο οποίο έχει δηλωθεί η αυτόματη μεταβλητή μπορεί να έχει πρόσβαση σε αυτό.

Μια λέξη-κλειδί auto χρησιμοποιείται για να ορίσει μια κατηγορία αυτόματης αποθήκευσης. Από προεπιλογή, μια αυτόματη μεταβλητή περιέχει μια τιμή σκουπιδιών.

Example, auto int age;

Το παρακάτω πρόγραμμα ορίζει μια συνάρτηση με δύο τοπικές μεταβλητές

int add(void) {
   int a=13;
   auto int b=48;
return a+b;}

Παίρνουμε ένα άλλο πρόγραμμα που δείχνει το επίπεδο εμβέλειας "επίπεδο ορατότητας" για τις αυτόματες μεταβλητές σε κάθε κωδικό μπλοκ που είναι ανεξάρτητα μεταξύ τους:

#include <stdio.h>
int main( )
{
  auto int j = 1;
  {
    auto int j= 2;
    {
      auto int j = 3;
      printf ( " %d ", j);
    }
    printf ( "\t %d ",j);
  }
  printf( "%d\n", j);}

ΠΑΡΑΓΩΓΗ:

 3 2 1

Κατηγορία εξωτερικής αποθήκευσης στο C

Το Extern σημαίνει κλάση εξωτερικής αποθήκευσης. Η κλάση εξωτερικής αποθήκευσης χρησιμοποιείται όταν έχουμε καθολικές συναρτήσεις ή μεταβλητές που μοιράζονται δύο ή περισσότερα αρχεία.

Λέξη-κλειδί εξωτερικός χρησιμοποιείται για τη δήλωση μιας καθολικής μεταβλητής ή συνάρτησης σε άλλο αρχείο για να παρέχει την αναφορά μεταβλητής ή συνάρτησης που έχουν ήδη οριστεί στο αρχικό αρχείο.

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

Example, extern void display();

Πρώτο αρχείο: main.c

#include <stdio.h>
extern i;
main() {
   printf("value of the external integer is = %d\n", i);
   return 0;}

Δεύτερο Αρχείο: original.c

#include <stdio.h>
i=48;

Αποτέλεσμα:

 value of the external integer is = 48


Για να μεταγλωττίσετε και να εκτελέσετε τον παραπάνω κώδικα, ακολουθήστε τα παρακάτω βήματα

Βήμα 1) Δημιουργία νέου έργου,

  1. Επιλέξτε Εφαρμογή Κονσόλας
  2. Κάντε κλικ στο κουμπί Μετάβαση

Κατηγορία εξωτερικής αποθήκευσης στο C

Βήμα 2) Επιλέξτε C και κάντε κλικ στο Επόμενο

Κατηγορία εξωτερικής αποθήκευσης στο C

Βήμα 3) Κάντε κλικ στο κουμπί Επόμενο

Κατηγορία εξωτερικής αποθήκευσης στο C

Βήμα 4) Εισαγάγετε λεπτομέρειες και κάντε κλικ στο Επόμενο

Κατηγορία εξωτερικής αποθήκευσης στο C

Βήμα 5) Κάντε κλικ στο κουμπί Τέλος

Κατηγορία εξωτερικής αποθήκευσης στο C

Βήμα 6) Βάλτε τον κύριο κωδικό όπως φαίνεται στο προηγούμενο πρόγραμμα στο αρχείο main.c και αποθηκεύστε τον

Κατηγορία εξωτερικής αποθήκευσης στο C

Βήμα 7) Δημιουργήστε ένα νέο αρχείο C [Αρχείο -> νέο -> Κενό αρχείο , αποθηκεύστε το (ως original.c) και προσθέστε το στο τρέχον έργο κάνοντας κλικ στο "OK" στο πλαίσιο διαλόγου .

Κατηγορία εξωτερικής αποθήκευσης στο C

Βήμα 8) Τοποθετήστε και αποθηκεύστε τον κώδικα C του αρχείου original.c που φαίνεται στο προηγούμενο παράδειγμα χωρίς τη συνάρτηση main().

Κατηγορία εξωτερικής αποθήκευσης στο C

Βήμα 9) Δημιουργήστε και εκτελέστε το έργο σας. Το αποτέλεσμα φαίνεται στο επόμενο σχήμα

Κατηγορία εξωτερικής αποθήκευσης στο C

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

Οι στατικές μεταβλητές χρησιμοποιούνται στη συνάρτηση/αρχείο ως τοπικές στατικές μεταβλητές. Μπορούν επίσης να χρησιμοποιηθούν ως α καθολική μεταβλητή

  • Η στατική τοπική μεταβλητή είναι μια τοπική μεταβλητή που διατηρεί και αποθηκεύει την τιμή της μεταξύ κλήσεων ή μπλοκ συναρτήσεων και παραμένει ορατή μόνο στη συνάρτηση ή το μπλοκ στο οποίο έχει οριστεί.
  • Οι στατικές καθολικές μεταβλητές είναι καθολικές μεταβλητές ορατές μόνο στο αρχείο στο οποίο δηλώνεται.
Example: static int count = 10;

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

#include <stdio.h> /* function declaration */
void next(void);
static int counter = 7; /* global variable */
main() {
 while(counter<10) {
      next();
      counter++;   }
return 0;}
void next( void ) {    /* function definition */
   static int iteration = 13; /* local static variable */
   iteration ++;
   printf("iteration=%d and counter= %d\n", iteration, counter);}

Αποτέλεσμα:

iteration=14 and counter= 7
iteration=15 and counter= 8
iteration=16 and counter= 9

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

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

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

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

Example: register int age;

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

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

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

#include <stdio.h> /* function declaration */
main() {
{register int  weight;
int *ptr=&weight ;/*it produces an error when the compilation occurs ,we cannot get a memory location when dealing with CPU register*/}
}

ΠΑΡΑΓΩΓΗ:

error: address of register variable 'weight' requested

Ο επόμενος πίνακας συνοψίζει τα κύρια χαρακτηριστικά κάθε κλάσης αποθήκευσης που χρησιμοποιούνται συνήθως στον προγραμματισμό C

Κατηγορία αποθήκευσης Δήλωση Αποθηκευτικός χώρος Προεπιλεγμένη αρχική τιμή Έκταση Διάρκεια ζωής
αυτόματη Μέσα σε μια λειτουργία/μπλοκ Μνήμη Απρόβλεπτος Εντός της λειτουργίας/μπλοκ Εντός της λειτουργίας/μπλοκ
κάντε ΕΓΓΡΑΦΗ Μέσα σε μια λειτουργία/μπλοκ Μητρώα CPU Σκουπίδια Εντός της λειτουργίας/μπλοκ Εντός της λειτουργίας/μπλοκ
εξωτερικός Εκτός όλων των λειτουργιών Μνήμη Μηδέν Ολόκληρο το αρχείο και άλλα αρχεία όπου η μεταβλητή δηλώνεται ως εξωτερική χρόνο εκτέλεσης προγράμματος
Στατικό (τοπικό) Μέσα σε μια λειτουργία/μπλοκ Μνήμη Μηδέν Εντός της λειτουργίας/μπλοκ χρόνο εκτέλεσης προγράμματος
Στατική (παγκόσμια) Εκτός όλων των λειτουργιών Μνήμη Μηδέν Παγκόσμιο χρόνο εκτέλεσης προγράμματος

Περίληψη

Σε αυτό το σεμινάριο έχουμε συζητήσει τις τάξεις αποθήκευσης στο C, για να συνοψίσουμε:

  • Μια κλάση αποθήκευσης στο C χρησιμοποιείται για να αναπαραστήσει πρόσθετες πληροφορίες σχετικά με μια μεταβλητή.
  • Η κλάση αποθήκευσης αντιπροσωπεύει το εύρος και τη διάρκεια ζωής μιας μεταβλητής.
  • Λέει επίσης ποιος μπορεί να έχει πρόσβαση σε μια μεταβλητή και από πού;
  • Auto, extern, register, static είναι οι τέσσερις διαφορετικές κατηγορίες αποθήκευσης σε ένα πρόγραμμα C.
  • Ένας προσδιοριστής κλάσης αποθήκευσης σε Γ γλώσσα χρησιμοποιείται για τον ορισμό μεταβλητών, συναρτήσεων και παραμέτρων.
  • Το auto χρησιμοποιείται για μια τοπική μεταβλητή που ορίζεται σε ένα μπλοκ ή μια συνάρτηση
  • καταχωρητής χρησιμοποιείται για την αποθήκευση της μεταβλητής σε καταχωρητές CPU και όχι θέση μνήμης για γρήγορη πρόσβαση.
  • Το Static χρησιμοποιείται τόσο για καθολικές όσο και για τοπικές μεταβλητές. Κάθε ένα έχει την περίπτωση χρήσης του σε ένα πρόγραμμα C.
  • Το εξωτερικό χρησιμοποιείται για κοινή χρήση δεδομένων μεταξύ αρχείων έργου C.