यहां दो अलग-अलग अवधारणाएं हैं –
- स्कोप, जो निर्धारित करता है कि किसी नाम को कहां एक्सेस किया जा सकता है – ग्लोबल और लोकल
- स्टोरेज ड्यूरेशन, जो निर्धारित करता है कि कोई वेरिएबल कब बनाया और नष्ट किया जाता है – static और auto
स्कोप
लोकल वेरिएबल्स का उपयोग केवल उन स्टेटमेंट्स द्वारा किया जा सकता है जो उस फंक्शन या कोड ब्लॉक के अंदर हैं। लोकल वेरिएबल्स अपने आप फंक्शन्स के लिए ज्ञात नहीं होते।
उदाहरण
#include <iostream>
using namespace std;
int main() {
// लोकल वेरिएबल घोषणा:
int a, b;
int c;
// वास्तविक आरंभीकरण
a = 10;
b = 20;
c = a + b;
cout << c;
return 0;
}
इससे आउटपुट मिलेगा –
आउटपुट
30
ग्लोबल वेरिएबल्स सभी फंक्शन्स के बाहर परिभाषित होते हैं, आमतौर पर प्रोग्राम के शीर्ष पर। ग्लोबल वेरिएबल्स आपके प्रोग्राम के पूरे जीवनकाल में अपना मान बनाए रखते हैं। एक ग्लोबल वेरिएबल को किसी भी फंक्शन द्वारा एक्सेस किया जा सकता है।
उदाहरण
#include <iostream>
using namespace std;
// ग्लोबल वेरिएबल घोषणा:
int g;
int main() {
// लोकल वेरिएबल घोषणा:
int a, b;
// वास्तविक आरंभीकरण
a = 10;
b = 20;
g = a + b;
cout << g;
return 0;
}
इससे आउटपुट मिलेगा –
आउटपुट
30
स्टोरेज ड्यूरेशन
ऑटोमैटिक वेरिएबल्स वे लोकल वेरिएबल्स हैं जिनका जीवनकाल तब समाप्त होता है जब एक्जीक्यूशन उनका स्कोप छोड़ देता है, और जब स्कोप में पुनः प्रवेश किया जाता है तो उन्हें पुनः बनाया जाता है।
उदाहरण
for (int i = 0; i < 5; ++i) {
int n = 0;
printf("%d ", ++n); // 1 1 1 1 1 प्रिंट करता है - पिछला मान खो जाता है
}
स्टैटिक वेरिएबल्स का जीवनकाल प्रोग्राम के अंत तक रहता है। यदि वे लोकल वेरिएबल्स हैं, तो उनका मान तब भी बना रहता है जब एक्जीक्यूशन उनका स्कोप छोड़ देता है।
for (int i = 0; i < 5; ++i) {
static int n = 0;
printf("%d ", ++n); // 1 2 3 4 5 प्रिंट करता है - मान बना रहता है
}
ध्यान दें कि static कीवर्ड के स्टैटिक स्टोरेज ड्यूरेशन के अलावा विभिन्न अर्थ हैं। साथ ही, C++ में auto कीवर्ड का अर्थ अब ऑटोमैटिक स्टोरेज ड्यूरेशन नहीं है; अब इसका अर्थ है वेरिएबल के इनिशियलाइज़र से अनुमानित ऑटोमैटिक टाइप।