Storage Classes in C Language [With Examples – In Hindi]

हेलो फ्रेंड्स आज के इस आर्टिकल में हम बात करने वाले है Storage Classes in C Language के बारे में | 

आज हम विस्तार से जानेंगे की स्टोरेज क्लासेस क्या है? (What is Storage Classes in C in Hindi) स्टोरेज क्लासेस कितने प्रकार के होते है? (Types of Storage Classes in C in Hindi ) और हम इनका उपयोग क्यों करते है ?

तो चलिए बिना समय गवाए जानते है Storage Classes क्या है? (Storage Classes in C in Hindi)

What is Storage Classes in C in Hindi
Storage Classes in C in Hindi

Storage Classes क्या है? (What is Storage Classes in C in Hindi)

सी लैंग्वेज में Storage Classes का उपयोग किसी वेरिएबल की life-time, scope, default value, और storage location को describe करने के लिए किया करता है | 

यहाँ ऊपर मैंने कुछ शब्दों का उपयोग किया है जैसे –  life-time,scope, default value, और storage location

आइये जानते है इनका क्या मतलब हुवा ?

Life -Time -: यहाँ पर life-time का मतलब किसी वेरिएबल के life से है | कोई वेरिएबल किसी प्रोग्राम में जितने समय तक रहता है वह उस वेरिएबल की लाइफटाइम कहलाती है | 

किसी वेरिएबल की लाइफ टाइम उसके डिक्लेरेशन पर निर्भर करती है | किसी वेरिएबल की लाइफटाइम को हम स्टोरेज क्लास को देखकर आसानी से बता सकते है | 

Scope -: वेरिएबल के scope का अर्थ है किसी वेरिएबल को डिक्लेअर करने के बाद उस वेरिएबल का उपयोग पुरे प्रोग्राम में कहा कहा किया जा सकता है | वेरिएबल का स्कोप बताता है कि कोई वेरिएबल प्रोग्राम में कहा कहा उपयोग हो सकता है | 

साधारणतः सी लैंग्वेज में जब हम कोई वेरिएबल बनाते है तो जिस ब्लॉक में हमने उस वेरिएबल को डिक्लेअर किया होता है उसका स्कोप भी केवल उसी ब्लॉक तक सिमित होता है | एक ब्लॉक में डिक्लेअर वेरिएबल को कोई दूसरा ब्लॉक एक्सेस करके उपयोग नहीं कर सकता |

Default Value or Initial Value -: जब वेरिएबल को डिक्लेअर करते समय हम कोई वैल्यू असाइन या स्टोर नहीं करते तो by डिफ़ॉल्ट जो वैल्यू उन वेरिएबल में स्टोर होती है उसे ही Default Value या Initial Value कहते है | 

Storage Area or Memory Location -: सी लैंग्वेज में जब हम वेरिएबल बनाते है तो उस वेरिएबल को प्रोग्राम के execution के दौरान जो मेमोरी मिलती है वो मेमोरी रैम में मिलती है या फिर रजिस्टर में मिलती है | वैसे यह स्टोरेज क्लास पर निर्भर करता है | स्टोरेज क्लास को देख कर हम पता लगा सकते है कि वेरिएबल को प्रोग्राम में किस लोकेशन में मेमोरी मिलेगी | 

Syntax -:

storage_class data_type variable_name; 

Types of Storage Classes In C

सी लैंग्वेज में Storage Classes चार प्रकार के होते है -:

  1. Automatic
  2. External
  3. Static
  4. Register

#1. Automatic Storage Class

सी लैंग्वेज में जब भी हम किसी ब्लॉक या फंक्शन के अंदर कोई वेरिएबल बनाते है तो वो by default, वह Automatic  Storage Classe वाला वेरिएबल होता है | 

Automatic वेरिएबल को डिक्लेअर करते समय auto कीवर्ड उपयोग होता है | हालंकि सी लैंग्वेज में जब भी हम कोई वेरिएबल बनाते है वो वह by default आटोमेटिक ही होता है | 

Auto कीवर्ड से declare वेरिएबल को औटोमाटिकली रैम में मेमोरी मिलती है तथा इस वेरिएबल का स्कोप केवल उस ब्लॉक या फंक्शन तक सीमित होता है जिस ब्लॉक्स या फंक्शन में यह डिक्लेअर होता है | 

इस वेरिएबल को हम एक फंक्शन में डिक्लेअर करके किसी दूसरे फंक्शन में उपयोग नहीं कर सकते | 

Automatic वेरिएबल की लाइफ तब तक रहती है जब तक वो ब्लॉक या फंक्शन जिसमे Automatic वेरिएबल डिक्लेअर होता है वो रन हो रहा होता है | जैसे ही फंक्शन execution ख़तम हो जाता है आटोमेटिक वेरिएबल भी नष्ट हो जाता है |  

जब वेरिएबल को डिक्लेअर करते समय कोई वैल्यू initialize नहीं किया जाता तब ऐसे वेरिएबल में by default गार्बेज वैल्यू स्टोर होता है | 

Syntax -:

auto data_type variable_name; 

Example -:

#include <stdio.h>
void main()
{ 
auto  int a;    //auto variable 
char b = 'a';  
float c;   
printf("%d %c %f",a,b,c); 
// printing initial default value of automatic variables a, b, and c.   
} 

Explanation -:

ऊपर दिए गए उदाहरण को एक बार अच्छे से देखे ! इसमें हमने a , b और c नाम से तीन वेरिएबल बनाया है जिसमे a वेरिएबल को हमने auto कीवर्ड का उपयोग करके बनाया है और b तथा c वेरिएबल को बिना auto कीवर्ड के बनाया है | 

a और c वेरिएबल में कोई भी वैल्यू initilize नहीं किया है |  b वेरिएबल को हमने  ‘a’ से initilize किया है |

चूँकि सी लैंग्वेज में बिना auto कीवर्ड के बने वेरिएबल भी आटोमेटिक स्टोरेज क्लास वेरिएबल होते है इसलिए हमे आटोमेटिक वेरिएबल बनाने के लिए अलग से auto कीवर्ड लिखना अनिवार्य नहीं होता है और इसलिए हमने b तथा c वेरिएबल को बिना auto कीवर्ड के बनाया है | 

जब हम इस प्रोग्राम को execute करते है तो रिजल्ट कुछ ऐसा आता है | 

Output -:

0 a 0.000000

चूँकि a और c वेरिएबल को हमने डिक्लेअर करते समय initilize नहीं किया है इसलिए रिजल्ट में गार्बेज वैल्यू प्रिंट हुई | 

#2. External Storage Class

External storage class क्लास को समझने से पहले आपको ये समझाना जरुरी है की ग्लोबल वेरिएबल क्या होता है ?

ग्लोबल वेरिएबल ऐसे वेरिएबल होते है जिनका डिक्लेरेशन Function के बारह होता है ऐसे वेरिएबल को हम अपने प्रोग्राम में कही भी, कभी भी, जब भी जरुरत हो उपयोग कर सकते है | 

ग्लोबल वेरिएबल का स्कोप किसी ब्लॉक या फंक्शन तक सिमित नहीं होता इसका उपयोग हम अपने प्रोग्राम में कही भी कर सकते है | इस वेरिएबल की वैल्यू को कोई भी function उपयोग और चेंज कर सकता है | 

External वेरिएबल एक तरह से ग्लोबल वेरिएबल ही है इनका उपयोग हम अलग अलग सोर्स फाइल में कर सकते है |  extern variable का स्कोप ग्लोबल होता है और जिस तरह जैसे ग्लोबल वेरिएबल का लाइफटाइम होता है उसी तरह इसका लाइफ टाइम भी पुरे प्रोग्राम के execution तक होता है |

इस वेरिएबल को Extern कीवर्ड के साथ डिक्लेअर किया जाता है | External variable को कई बार डिक्लेअर किया जा सकता है मगर इसका initialization केवल एक बार होता है | 

Syntax -:

extern data_type variable_name; 

extern variable यदि इन्टिजर टाइप का होता है तो इसमें by डिफ़ॉल्ट 0 वैल्यू स्टोर होता है और यदि extern variable इन्टिजर टाइप का नहीं होता तो इसमें initial value, null होता है | 

extern variable यदि किसी प्रोग्राम में उपयोग किया जाता है तो इसको रैम में मेमोरी मिलती है | extern variable का उपयोग मुख्यतः वेरिएबल की visiblity बढ़ाने के लिए किया जाता है |

Example -:

#include<stdio.h>
extern int var = 0;
int main(void)
{
var = 10;
return 0;
}

#3. Static Storage Class

स्टैटिक वेरिएबल Static कीवर्ड की मदद से बनते है Static वेरिएबल बनाने के लिए वेरिएबल डिक्लेरेशन के समय Static कीवर्ड का उपयोग किया जाता है | 

इसकी लाइफ पुरे प्रोग्राम के execution तक होती है मतलब जब तक प्रोग्राम execute हो रहा है तब तक Static वेरिएबल भी रहेगा और जैसे ही प्रोग्राम का execution ख़तम हो जायेगा, Static वेरिएबल भी नस्ट हो जायेगा | 

Static वेरिएबल का स्कोप इसके डिक्लेरेशन पर निर्भर करता है | Static वेरिएबल को यदि हम किसी फंक्शन या ब्लॉक के अंदर डिक्लेयर करते है तो इसे local Static variable कहते है और यदि Static variable का डिक्लेरेशन फंक्शन के बाहर करते है तो इसे global Static variable कहते है | 

Local Static variable का स्कोप केवल उस फंक्शन तक सीमित होता है |  इस वेरिएबल का उपयोग हम केवल उस फंक्शन में कर सकते है  जिस फंक्शन में वह डिक्लेअर होता है इसका उपयोग हम किसी दूसरे फंक्शन में नहीं कर सकते | 

Global Static variable का स्कोप ग्लोबल होता है इस वेरिएबल का उपयोग हम पुरे प्रोग्राम में कही भी, किसी भी फंक्शन में कर सकते है | 

Static variable की वैल्यू डिक्लेअर करते टाइम by default जीरो होता है जबकि नार्मल वेरिएबल में by default गार्बेज वैल्यू होता है | 

नोट -: Static variable को किसी फंक्शन में उपयोग करने पर उस फंक्शन को जितनी बार कॉल किया जाता है static variable की बढ़ी हुई वैल्यू के साथ वह उपयोग होता है | जब स्टैटिक वेरिएबल बनता है तब वेरिएबल को रैम में मेमोरी मिलती है | 

Syntax -:

static data_type variable_name; 

Example -:

#include <stdio.h>
void func(void);        //function declaration
static int count = 5;   //static global variable 
 
main() 
{

   while(count--) {
      func();
   }	
   return 0;
}
void func( void ) //function definition
 {

   static int i = 5;   // local static variable *
   i++;

   printf("i is %d and count is %d\n", i, count);
}

Output -:

i is 6 and count is 4
i is 7 and count is 3
i is 8 and count is 2
i is 9 and count is 1
i is 10 and count is 0

Static variable को किसी फंक्शन में उपयोग करने पर उस फंक्शन को जितनी बार कॉल किया जाता है static variable की बढ़ी हुई वैल्यू के साथ ही वह फंक्शन  में उपयोग होता है जैसे कि अभी इस प्रोग्राम में static variable का उपयोग हुवा है जो बढे हुए वैल्यू के साथ उपयोग हो रहा है जिसे आप आउटपुट में देख सकते है | 

#4. Register Storage Class

Register Storage Class का उपयोग हम तब करते है जब हमे अपने प्रोग्राम के किसी वेरिएबल को रैम में स्टोर न कराके cpu रिजिस्टर में स्टोर कराना होता है | ऐसा हम इसलिए भी करते है ताकि वेरिएबल को जल्दी से एक्सेस कर सके | इससे प्रोग्राम की स्पीड काफी बढ़ जाती है | 

Register Storage Class के वेरिएबल को हम register कीवर्ड का उपयोग करके डिक्लेअर करते है | 

register वेरिएबल का एक्सेस टाइम आटोमेटिक वेरिएबल से फ़ास्ट होता है क्योकि यह रजिस्टर मे स्टोर होता है जिससे CPU इसमें स्टोर डेटा को फ़ास्ट एक्सेस कर लेता है | 

जब हम किसी वेरिएबल को रजिस्टर कीवर्ड के साथ डिक्लेअर करते है तो उस वेरिएबल को रैम में मेमोरी न मिलके रजिस्टर में मेमोरी मिलती है | मगर इसका मिलता ये बिलकुल नहीं कि रजिस्टर कीवर्ड से वेरिएबल बनाने पर वेरिएबल को रजिस्टर में ही मेमोरी मिलेगी | यह कम्पाइलर पर निर्भर करता है | 

रजिस्टर कीवर्ड की मदद से हम केवल इन्टिजर और करैक्टर टाइप के वेरिएबल को बनाते है | 

यदि हम डबल या फ्लोट data type से कोई वेरिएबल बनाते है और उसके register कीवर्ड का उपयोग करते है तो भी इसमें डबल और फ्लोट डेटा टाइप के वेरिएबल को रजिस्टर में मेमोरी नहीं मिलेगी | इन्हे केवल रैम में ही मेमोरी मिलेगी | तो किसी वेरिएबल को हम चाहे तो रजिस्टर वेरिएबल बना सकते है मगर उसको मेमोरी कहा मिलेगी ये कम्पाइलर पर डिपेंड करता है | 

रजिस्टर वेरिएबल की स्कोप केवल उस ब्लॉक या फंक्शन तक सीमित होता है जिस  ब्लॉक या फंक्शन मे वह डिक्लेअर होता है इसका उपयोग हम एक फंक्शन में डिक्लेअर करके दूसरे फंक्शन में नहीं कर सकते | 

रजिस्टर मेमोरी की लाइफ टाइम उस फंक्शन के लाइफ के बराबर होते है जिस फंक्शन में वह बना होता है जैसे ही फंक्शन ख़तम होता है रजिस्टर वेरिएबल भी नस्ट हो जाता है | 

रजिस्टर वेरिएबल में initial value, garbage value होती है |

Syntax -:

register data_type variable_name;

Example -:

#include <stdio.h>
void main()
{ 
register int a = 6;    //register variable 

printf("%d",a); 

// printing initial default value of register variables a.  
} 

Output -:

6

Important Point About Storage Classes: कौन सा स्टोरेज क्लास कब और कहां उपयोग होगा?

Storage Classes का उपयोग मेमोरी के कुशल उपयोग और प्रोग्राम की स्पीड को बढ़ने के लिए किया जाता है निचे मैं आपको कुछ important पॉइंट बताने वाला हूँ कि हम कब कौन से इन स्टोरेज क्लासेज का उपयोग  कब और कहां करना चाहिए | 

  • static storage class का उपयोग तब करना चाहिए जब हम चाहते है कि वेरिएबल का मान हर बार अलग-अलग फंक्शन कॉल्स में अपनी बढ़ी हुई वैल्यू के साथ ही उपयोग हो | 
  • रजिस्टर स्टोरेज क्लास का उपयोग हमे तब करना चाहिए जब हम चाहते हो कि वेरिएबल को रैम में मेमोरी न मिलके रजिस्टर में मेमोरी मिले | ताकि cpu का वेरिएबल को एक्सेस करने में लगने वाला टाइम कम हो जाये और प्रोग्राम की स्पीड बढ़ जाये | 
  •  external or global storage class का उपयोग तब करना चाहिए जब हमे ऐसे वेरिएबल की जरुरत हो जिसे हम अपने प्रोग्राम में कही भी, किसी भी फंक्शन के साथ उपयोग कर सके | 
  • यदि ऊपर दिए गए किसी भी उद्देश्य के लिए हमे वेरिएबल नहीं बनाना तो हमे आटोमेटिक स्टोरेज क्लास वेरिएबल का उपयोग करना चाहिए | 

निष्कर्ष

दोस्तों आशा करता हु कि आज के इस आर्टिकल को पढ़ने के बाद आपको स्टोरेज क्लासेस क्या है? (What is Storage Classes in C in Hindi) स्टोरेज क्लासेस कितने प्रकार के होते है? (Types of Storage Classes in C in Hindi ) से संबंधित सभी जानकारी मिल गई होगी और आपको और कही इसके बारे में सर्च करना नहीं पड़ेगा |

अगर आप सी लैंग्वेज का Complete Tutorial चाहते है तो मेरे इस पोस्ट C Language Tutorial In Hindi को देखे यहाँ आपको C Programming Language के सभी टॉपिक्स step by step मिल जाएगी |

दोस्तों आशा करता हु कि आपको ये पोस्ट पसंद आई होगी और आपको स्टोरेज क्लासेस क्या है? (What is Storage Classes in C in Hindi) स्टोरेज क्लासेस कितने प्रकार के होते है? (Types of Storage Classes in C in Hindi )के बारे में काफी जानकरी हुई होगी |

अगर आपको ये पोस्ट पसंद आया है तो इस पोस्ट को अपने अपने दोस्तों को शेयर करना न भूलिएगा ताकि उनको भी ये जानकारी प्राप्त हो सके |

अगर आपको अभी भी Storage Classes in C Language से संबंधित कोई भी प्रश्न या Doubt है तो आप जरूर बताये मैं आपके सभी सवालों का जवाब दूँगा और ज्यादा जानकारी के लिए आप हमसे संपर्क कर सकते है |

एसी ही नया टेक्नोलॉजी ,Programming Language, Coding , C Language, C++, Python Course , Java Tutorial से रिलेटेड जानकारियाँ पाने के लिए हमारे इस वेबसाइट को सब्सक्राइब कर दीजिए | जिससे हमारी आने वाली नई पोस्ट की सूचनाएं जल्दी प्राप्त होगी |

Jeetu Sahu is A Web Developer | Computer Engineer | Passionate about Coding, Competitive Programming and Blogging