स्टेटिक वेरिएबल वे वेरिएबल होते हैं जो प्रोग्राम चलने तक मेमोरी में रहते हैं यानी उनका जीवनकाल पूरे प्रोग्राम रन का होता है। यह ऑटोमेटिक वेरिएबल से अलग है क्योंकि वे केवल तभी मेमोरी में रहते हैं जब उनका फंक्शन चल रहा होता है और फंक्शन खत्म होने पर नष्ट हो जाते हैं।
स्टेटिक वेरिएबल मेमोरी के डेटा सेगमेंट में स्टोर होते हैं। डेटा सेगमेंट एक प्रोग्राम के वर्चुअल एड्रेस स्पेस का एक हिस्सा है।
वे सभी स्टेटिक वेरिएबल जिनमें कोई स्पष्ट आरंभीकरण नहीं होता या जो शून्य से आरंभ होते हैं, अनारंभिक डेटा सेगमेंट में स्टोर होते हैं (इसे BSS सेगमेंट के रूप में भी जाना जाता है)। इसकी तुलना में, जो स्टेटिक वेरिएबल आरंभ किए जाते हैं, वे आरंभिक डेटा सेगमेंट में स्टोर होते हैं।
इसका एक उदाहरण निम्नलिखित है -
static int x = 5; static int y; स्टेटिक वेरिएबल x आरंभिक डेटा सेगमेंट में स्टोर होता है और स्टेटिक वेरिएबल y BSS सेगमेंट में स्टोर होता है।
C में स्टेटिक वेरिएबल को प्रदर्शित करने वाला एक प्रोग्राम निम्नलिखित है -
उदाहरण
#include <stdio.h>
int func()
{
static int i = 4;
i++;
return i;
}
int main()
{
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());
return 0;
}
उपरोक्त प्रोग्राम का आउटपुट निम्नलिखित है -
5 6 7 8 9 10
अब आइए उपरोक्त प्रोग्राम को समझते हैं।
फंक्शन func() में, i एक स्टेटिक वेरिएबल है जिसे 4 से आरंभ किया गया है। इसलिए यह आरंभिक डेटा सेगमेंट में स्टोर होता है। फिर i को बढ़ाया जाता है और इसका मान वापस किया जाता है। इसे दिखाने वाला कोड स्निपेट निम्नलिखित है -
int func()
{
static int i = 4;
i++;
return i;
}
फंक्शन main() में, फंक्शन func() को 6 बार कॉल किया जाता है और यह i का मान वापस करता है जिसे प्रिंट किया जाता है। चूंकि i एक स्टेटिक वेरिएबल है, यह प्रोग्राम चलने तक मेमोरी में रहता है और सुसंगत मान प्रदान करता है। इसे दिखाने वाला कोड स्निपेट निम्नलिखित है -
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());