C'de Depolama Sınıfı nedir?
Bir depolama sınıfı, bir değişkenin görünürlüğünü ve konumunu temsil eder. Bir değişkene kodun hangi kısmından erişebileceğimizi söyler. C'deki bir depolama sınıfı, aşağıdaki şeyleri açıklamak için kullanılır:
- Değişken kapsamı.
- Değişkenin depolanacağı konum.
- Bir değişkenin başlatılmış değeri.
- Bir değişkenin ömrü.
- Bir değişkene kim erişebilir?
Bu nedenle, bir değişken hakkındaki bilgileri temsil etmek için bir depolama sınıfı kullanılır.
NOT: Bir değişken yalnızca bir veri türüyle değil, değeriyle değil, aynı zamanda bir depolama sınıfıyla da ilişkilidir.
Toplam dört tür standart depolama sınıfı vardır. Aşağıdaki tablo, C'deki depolama sınıflarını temsil etmektedir.
Depolama sınıfı | Amaç |
Oto | Varsayılan bir depolama sınıfıdır. |
dış | Global bir değişkendir. |
statik | Kontrol işlev çağrısına aktarıldığında bile bir değer döndürebilen yerel bir değişkendir. |
Kayıt ol | Bir Register içinde saklanan bir değişkendir. |
Bu C eğitiminde, örneklerle C'deki farklı depolama sınıfı türlerini öğreneceksiniz.
- C'de Otomatik Depolama Sınıfı
- C'de Harici Depolama Sınıfı
- İlk Dosya: main.c
- İkinci Dosya: original.c
- C Statik Depolama Sınıfı
- C Depolama Sınıfını Kaydedin
C'de Otomatik Depolama Sınıfı
Otomatik depolama sınıfı kullanılarak tanımlanan değişkenler yerel değişkenler olarak adlandırılır. Otomatik, otomatik depolama sınıfı anlamına gelir. Açıkça belirtilmemişse, bir değişken varsayılan olarak otomatik depolama sınıfındadır.
Bir otomatik değişkenin kapsamı yalnızca belirli bir blokla sınırlıdır. Kontrol bloktan çıktığında erişim yok olur. Bu, yalnızca auto değişkeninin bildirildiği bloğun ona erişebileceği anlamına gelir.
Bir otomatik depolama sınıfını tanımlamak için otomatik anahtar sözcüğü kullanılır. Varsayılan olarak, bir otomatik değişken bir anlamsız değer içerir.
Example, auto int age;
Aşağıdaki program, iki yerel değişkene sahip bir işlevi tanımlar
int add(void) {int a=13;auto int b=48;return a+b;}
Birbirinden bağımsız olarak her blok kodundaki otomatik değişkenler için kapsam seviyesi "görünürlük seviyesini" gösteren başka bir program alıyoruz:
#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);}
ÇIKTI:
3 2 1
C'de Harici Depolama Sınıfı
Extern, harici depolama sınıfı anlamına gelir. Harici depolama sınıfı, iki veya daha fazla dosya arasında paylaşılan global işlevlere veya değişkenlere sahip olduğumuzda kullanılır.
Keyword extern , orijinal dosyada zaten tanımlanmış olan değişken veya işlevin referansını sağlamak için başka bir dosyada genel bir değişkeni veya işlevi bildirmek için kullanılır.
Bir extern anahtar sözcüğü kullanılarak tanımlanan değişkenler, genel değişkenler olarak adlandırılır. Bu değişkenlere program boyunca erişilebilir. Extern değişkeninin başlatılamadığına ve orijinal dosyada zaten tanımlandığına dikkat edin.
Example, extern void display();
İlk Dosya: main.c
#includeextern i;main() {printf("value of the external integer is = %d\n", i);return 0;}
İkinci Dosya: original.c
#includei=48;
Sonuç:
value of the external integer is = 48
Yukarıdaki kodu derlemek ve çalıştırmak için aşağıdaki adımları izleyin.
Adım 1) Yeni proje oluşturun,
- Konsol Uygulamasını Seçin
- Git'i tıklayın
Adım 2) C'yi seçin ve İleri'ye tıklayın
Adım 3) İleri'ye tıklayın
Adım 4) Ayrıntıları girin ve İleri'ye tıklayın
Adım 5) Bitir'e tıklayın
Adım 6) Ana kodu önceki programda gösterildiği gibi main.c dosyasına koyun ve kaydedin
Adım 7) Yeni bir C dosyası oluşturun [Dosya -> yeni -> Dosyayı Boşalt, kaydedin (orijinal.c olarak) ve diyalog kutusunda "Tamam" a tıklayarak mevcut projeye ekleyin.
Adım 8) Önceki örnekte gösterilen original.c dosyasının C kodunu main () işlevi olmadan koyun ve kaydedin.
Adım 9) Projenizi oluşturun ve çalıştırın. Sonuç bir sonraki şekilde gösterilmektedir
C Statik Depolama Sınıfı
Statik değişkenler, yerel statik değişkenler olarak işlev / dosya içinde kullanılır. Küresel değişken olarak da kullanılabilirler
- Statik yerel değişken, değerini işlev çağrıları veya bloklar arasında tutan ve depolayan ve yalnızca içinde tanımlandığı işlev veya blok tarafından görülebilir kalan yerel bir değişkendir.
- Statik global değişkenler, yalnızca bildirildiği dosyada görülebilen global değişkenlerdir .
Example: static int count = 10;
Statik değişkenin varsayılan bir başlangıç değeri sıfır olduğunu ve yaşam süresi boyunca yalnızca bir kez başlatıldığını unutmayın.
#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);}
Sonuç:
iteration=14 and counter= 7iteration=15 and counter= 8iteration=16 and counter= 9
Global değişkenlere dosya boyunca erişilebilirken, statik değişkenlere yalnızca bir kodun belirli bir bölümünde erişilebilir.
Statik bir değişkenin ömrü tüm program kodundadır. Statik anahtar kelime kullanılarak bildirilen veya başlatılan bir değişken, varsayılan değer olarak her zaman sıfır içerir.
C Depolama Sınıfını Kaydedin
Bu değişkenlere hızlı erişim sağlamak için yerel değişkenleri RAM yerine CPU kayıtlarındaki işlevler veya bloklar içinde depolamak istediğinizde kayıt depolama sınıfını kullanabilirsiniz. Örneğin, "sayaçlar" kayıtta saklanmak için iyi bir adaydır.
Example: register int age;
Anahtar sözcük kaydı , bir kayıt saklama sınıfını bildirmek için kullanılır. Kayıt depolama sınıfı kullanılarak bildirilen değişkenlerin program boyunca ömrü vardır.
Otomatik depolama sınıfına benzer. Değişken, belirli blok ile sınırlıdır. Tek fark, yazmaç saklama sınıfı kullanılarak bildirilen değişkenlerin bir bellek yerine CPU yazmaçlarında saklanmasıdır. Register, ana bellekten daha hızlı erişime sahiptir.
Kayıt depolama sınıfı kullanılarak bildirilen değişkenlerin varsayılan değeri yoktur. Bu değişkenler genellikle bir programın başında bildirilir.
#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*/}}
ÇIKTI:
error: address of register variable 'weight' requested
Sonraki tablo, C programlamada yaygın olarak kullanılan her bir depolama sınıfının temel özelliklerini özetlemektedir.
Depolama Sınıfı | Beyanname | Depolama | Varsayılan Başlangıç Değeri | Dürbün | Ömür |
Oto | Bir fonksiyonun / bloğun içinde | Hafıza | Öngörülemeyen | İşlev / blok içinde | İşlev / blok içinde |
Kayıt ol | Bir fonksiyonun / bloğun içinde | CPU Kayıtları | Çöp | İşlev / blok içinde | İşlev / blok içinde |
dış | Tüm fonksiyonların dışında | Hafıza | Sıfır | Değişkenin extern olarak bildirildiği dosyanın ve diğer dosyaların tamamı | program çalışma zamanı |
Statik (yerel) | Bir fonksiyonun / bloğun içinde | Hafıza | Sıfır | İşlev / blok içinde | program çalışma zamanı |
Statik (genel) | Tüm fonksiyonların dışında | Hafıza | Sıfır | Küresel | program çalışma zamanı |
Özet
Bu öğreticide özetlemek için C'deki depolama sınıflarını tartıştık:
- C'deki bir depolama sınıfı, bir değişkenle ilgili ek bilgileri temsil etmek için kullanılır.
- Depolama sınıfı, bir değişkenin kapsamını ve ömrünü temsil eder.
- Aynı zamanda bir değişkene kimin ve nereden erişebileceğini de söyler.
- Otomatik, harici, kayıt, statik, bir C programındaki dört farklı depolama sınıfıdır.
- Değişkenleri, işlevleri ve parametreleri tanımlamak için C dilinde bir depolama sınıfı belirticisi kullanılır.
- auto, bir blok veya işlev içinde tanımlanan yerel bir değişken için kullanılır
- kayıt, hızlı erişim için bellek konumu yerine değişkeni CPU kayıtlarında saklamak için kullanılır.
- Statik, hem genel hem de yerel değişkenler için kullanılır. Her birinin bir C programı içinde kendi kullanım durumu vardır.
- Extern, C proje dosyaları arasında veri paylaşımı için kullanılır.