Τι είναι η κατηγορία αποθήκευσης σε C;
Μια κλάση αποθήκευσης αντιπροσωπεύει την ορατότητα και τη θέση μιας μεταβλητής. Λέει από ποιο μέρος του κώδικα μπορούμε να έχουμε πρόσβαση σε μια μεταβλητή. Μια τάξη αποθήκευσης σε C χρησιμοποιείται για να περιγράψει τα ακόλουθα πράγματα:
- Το μεταβλητό πεδίο.
- Η τοποθεσία όπου θα αποθηκευτεί η μεταβλητή.
- Η αρχικοποιημένη τιμή μιας μεταβλητής.
- Μια διάρκεια ζωής μιας μεταβλητής.
- Ποιος μπορεί να έχει πρόσβαση σε μια μεταβλητή;
Έτσι χρησιμοποιείται μια τάξη αποθήκευσης για την αναπαράσταση των πληροφοριών σχετικά με μια μεταβλητή.
ΣΗΜΕΙΩΣΗ: Μια μεταβλητή δεν σχετίζεται μόνο με έναν τύπο δεδομένων, την τιμή του αλλά και μια κλάση αποθήκευσης.
Υπάρχουν συνολικά τέσσερις τύποι τυπικών κατηγοριών αποθήκευσης. Ο παρακάτω πίνακας αντιπροσωπεύει τις κατηγορίες αποθήκευσης σε C.
Κατηγορία αποθήκευσης | Σκοπός |
αυτο | Είναι μια προεπιλεγμένη κατηγορία αποθήκευσης. |
εξωτερικά | Είναι μια παγκόσμια μεταβλητή. |
στατικός | Είναι μια τοπική μεταβλητή που μπορεί να επιστρέψει μια τιμή ακόμη και όταν ο έλεγχος μεταφέρεται στην κλήση συνάρτησης. |
κανω ΕΓΓΡΑΦΗ | Είναι μια μεταβλητή που αποθηκεύεται μέσα σε ένα Μητρώο. |
Σε αυτό το σεμινάριο C, θα μάθετε διαφορετικούς τύπους τάξεων αποθήκευσης στο C με παραδείγματα-
- Κατηγορία αυτόματης αποθήκευσης σε C
- Εξωτερική κατηγορία αποθήκευσης σε C
- Πρώτο αρχείο: main.c
- Δεύτερο αρχείο: original.c
- Κατηγορία στατικής αποθήκευσης σε C
- Εγγραφή κλάσης αποθήκευσης σε C
Κατηγορία αυτόματης αποθήκευσης σε C
Οι μεταβλητές που ορίζονται χρησιμοποιώντας την κατηγορία αυτόματης αποθήκευσης ονομάζονται τοπικές μεταβλητές. Αυτόματο σημαίνει αυτόματη κατηγορία αποθήκευσης. Μια μεταβλητή είναι στην κατηγορία αυτόματης αποθήκευσης από προεπιλογή, εάν δεν προσδιορίζεται ρητά.
Το εύρος μιας αυτόματης μεταβλητής περιορίζεται μόνο με το συγκεκριμένο μπλοκ. Μόλις ο έλεγχος βγει από το μπλοκ, η πρόσβαση καταστρέφεται. Αυτό σημαίνει ότι μόνο το μπλοκ στο οποίο δηλώνεται η αυτόματη μεταβλητή μπορεί να έχει πρόσβαση σε αυτό.
Μια λέξη-κλειδί αυτόματη χρησιμοποιείται για τον ορισμό μιας αυτόματης κλάσης αποθήκευσης. Από προεπιλογή, μια αυτόματη μεταβλητή περιέχει μια τιμή σκουπιδιών.
Example, auto int age;
Το παρακάτω πρόγραμμα ορίζει μια συνάρτηση με δύο τοπικές μεταβλητές
int add(void) {int a=13;auto int b=48;return a+b;}
Παίρνουμε ένα άλλο πρόγραμμα που δείχνει το επίπεδο πεδίου "επίπεδο ορατότητας" για αυτόματες μεταβλητές σε κάθε μπλοκ κώδικα που είναι ανεξάρτητα μεταξύ τους:
#includeint 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
#includeextern i;main() {printf("value of the external integer is = %d\n", i);return 0;}
Δεύτερο αρχείο: original.c
#includei=48;
Αποτέλεσμα:
value of the external integer is = 48
Για να μεταγλωττίσετε και να εκτελέσετε τον παραπάνω κώδικα, ακολουθήστε τα παρακάτω βήματα
Βήμα 1) Δημιουργία νέου έργου,
- Επιλέξτε Εφαρμογή κονσόλας
- Κάντε κλικ στο Μετάβαση
Βήμα 2) Επιλέξτε C και κάντε κλικ στο Επόμενο
Βήμα 3) Κάντε κλικ στο Επόμενο
Βήμα 4) Εισαγάγετε λεπτομέρειες και κάντε κλικ στο Επόμενο
Βήμα 5) Κάντε κλικ στο Τέλος
Βήμα 6) Βάλτε τον κύριο κωδικό όπως φαίνεται στο προηγούμενο πρόγραμμα στο αρχείο main.c και αποθηκεύστε τον
Βήμα 7) Δημιουργήστε ένα νέο αρχείο C [Αρχείο -> νέο -> Κενό αρχείο, αποθηκεύστε (ως original.c) και προσθέστε το στο τρέχον έργο κάνοντας κλικ στο "OK" στο πλαίσιο διαλόγου.
Βήμα 8) Βάλτε και αποθηκεύστε τον κωδικό C του αρχείου original.c που φαίνεται στο προηγούμενο παράδειγμα χωρίς την κύρια () συνάρτηση.
Βήμα 9) Δημιουργήστε και εκτελέστε το έργο σας. Το αποτέλεσμα φαίνεται στο επόμενο σχήμα
Κατηγορία στατικής αποθήκευσης σε C
Οι στατικές μεταβλητές χρησιμοποιούνται στη συνάρτηση / αρχείο ως τοπικές στατικές μεταβλητές. Μπορούν επίσης να χρησιμοποιηθούν ως παγκόσμια μεταβλητή
- Η στατική τοπική μεταβλητή είναι μια τοπική μεταβλητή που διατηρεί και αποθηκεύει την αξία της μεταξύ λειτουργιών κλήσεων ή μπλοκ και παραμένει ορατή μόνο στη συνάρτηση ή στο μπλοκ στην οποία ορίζεται.
- Οι στατικές καθολικές μεταβλητές είναι καθολικές μεταβλητές που είναι ορατές μόνο στο αρχείο στο οποίο δηλώνεται.
Example: static int count = 10;
Λάβετε υπόψη ότι η στατική μεταβλητή έχει μια προεπιλεγμένη αρχική τιμή μηδέν και αρχικοποιείται μόνο μία φορά στη διάρκεια της ζωής της.
#include/* 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= 7iteration=15 and counter= 8iteration=16 and counter= 9
Οι καθολικές μεταβλητές είναι προσβάσιμες σε όλο το αρχείο, ενώ οι στατικές μεταβλητές είναι προσβάσιμες μόνο στο συγκεκριμένο μέρος ενός κώδικα.
Η διάρκεια ζωής μιας στατικής μεταβλητής βρίσκεται σε ολόκληρο τον κώδικα προγράμματος. Μια μεταβλητή που δηλώνεται ή αρχικοποιείται χρησιμοποιώντας στατική λέξη-κλειδί περιέχει πάντα μηδέν ως προεπιλεγμένη τιμή.
Εγγραφή κλάσης αποθήκευσης σε C
Μπορείτε να χρησιμοποιήσετε την τάξη αποθήκευσης μητρώου όταν θέλετε να αποθηκεύσετε τοπικές μεταβλητές σε συναρτήσεις ή μπλοκ σε καταχωρητές CPU αντί για RAM για γρήγορη πρόσβαση σε αυτές τις μεταβλητές. Για παράδειγμα, οι "μετρητές" είναι ένας καλός υποψήφιος για αποθήκευση στο μητρώο.
Example: register int age;
Ο καταχωρητής λέξεων-κλειδιών χρησιμοποιείται για να δηλώσει μια τάξη αποθήκευσης μητρώου. Οι μεταβλητές που δηλώνονται χρησιμοποιώντας την τάξη αποθήκευσης μητρώου έχουν διάρκεια ζωής σε όλο το πρόγραμμα.
Είναι παρόμοιο με την κατηγορία αυτόματης αποθήκευσης. Η μεταβλητή περιορίζεται στο συγκεκριμένο μπλοκ. Η μόνη διαφορά είναι ότι οι μεταβλητές που δηλώνονται χρησιμοποιώντας την τάξη αποθήκευσης μητρώου αποθηκεύονται σε καταχωρητές CPU αντί για μνήμη. Το Register έχει ταχύτερη πρόσβαση από αυτήν της κύριας μνήμης.
Οι μεταβλητές που δηλώθηκαν χρησιμοποιώντας την κατηγορία αποθήκευσης μητρώου δεν έχουν προεπιλεγμένη τιμή. Αυτές οι μεταβλητές δηλώνονται συχνά στην αρχή ενός προγράμματος.
#include/* 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
Ο επόμενος πίνακας συνοψίζει τα κύρια χαρακτηριστικά κάθε κλάσης αποθήκευσης που χρησιμοποιούνται συνήθως στον προγραμματισμό Γ
Κατηγορία αποθήκευσης | Δήλωση | Αποθήκευση | Προεπιλεγμένη αρχική τιμή | Πεδίο εφαρμογής | Διάρκεια Ζωής |
αυτο | Μέσα σε μια συνάρτηση / μπλοκ | Μνήμη | Απρόβλεπτος | Μέσα στη συνάρτηση / μπλοκ | Μέσα στη συνάρτηση / μπλοκ |
κανω ΕΓΓΡΑΦΗ | Μέσα σε μια συνάρτηση / μπλοκ | Μητρώα CPU | Σκουπίδια | Μέσα στη συνάρτηση / μπλοκ | Μέσα στη συνάρτηση / μπλοκ |
εξωτερικά | Εκτός όλων των λειτουργιών | Μνήμη | Μηδέν | Ολόκληρο το αρχείο και άλλα αρχεία όπου η μεταβλητή δηλώνεται ως εξωτερική | χρόνος εκτέλεσης προγράμματος |
Στατικός (τοπικός) | Μέσα σε μια συνάρτηση / μπλοκ | Μνήμη | Μηδέν | Μέσα στη συνάρτηση / μπλοκ | χρόνος εκτέλεσης προγράμματος |
Στατικό (παγκόσμιο) | Εκτός όλων των λειτουργιών | Μνήμη | Μηδέν | Παγκόσμια | χρόνος εκτέλεσης προγράμματος |
Περίληψη
Σε αυτό το σεμινάριο έχουμε συζητήσει τάξεις αποθήκευσης στο C, για να συνοψίσουμε:
- Μια τάξη αποθήκευσης σε C χρησιμοποιείται για την αναπαράσταση πρόσθετων πληροφοριών σχετικά με μια μεταβλητή.
- Η κλάση αποθήκευσης αντιπροσωπεύει το εύρος και τη διάρκεια ζωής μιας μεταβλητής.
- Επίσης, λέει ποιος μπορεί να έχει πρόσβαση σε μια μεταβλητή και από πού;
- Auto, extern, register, static είναι οι τέσσερις διαφορετικές τάξεις αποθήκευσης σε ένα πρόγραμμα C.
- Ένας προσδιοριστής κλάσης αποθήκευσης στη γλώσσα C χρησιμοποιείται για τον καθορισμό μεταβλητών, συναρτήσεων και παραμέτρων.
- Το auto χρησιμοποιείται για μια τοπική μεταβλητή που ορίζεται σε ένα μπλοκ ή συνάρτηση
- Το register χρησιμοποιείται για την αποθήκευση της μεταβλητής στους καταχωρητές CPU και όχι στη θέση μνήμης για γρήγορη πρόσβαση.
- Το στατικό χρησιμοποιείται τόσο για παγκόσμιες όσο και για τοπικές μεταβλητές. Ο καθένας έχει τη θήκη χρήσης του σε ένα πρόγραμμα Γ.
- Το Extern χρησιμοποιείται για κοινή χρήση δεδομένων μεταξύ αρχείων έργου C.