स्थिर चर वे चर हैं जो प्रोग्राम के चलने के दौरान स्मृति में बने रहते हैं अर्थात उनका जीवनकाल पूरे प्रोग्राम को चलाने के लिए होता है। यह स्वचालित चरों से भिन्न है क्योंकि वे स्मृति में तभी रहते हैं जब उनका कार्य चल रहा होता है और कार्य समाप्त होने पर नष्ट हो जाते हैं।
स्टैटिक वेरिएबल्स को मेमोरी के डेटा सेगमेंट में स्टोर किया जाता है। डेटा सेगमेंट प्रोग्राम के वर्चुअल एड्रेस स्पेस का एक हिस्सा है।
सभी स्टैटिक वेरिएबल्स जिनमें स्पष्ट इनिशियलाइज़ेशन नहीं है या शून्य से इनिशियलाइज़ किया गया है, उन्हें अनइनिशियलाइज़्ड डेटा सेगमेंट (जिसे BSS सेगमेंट भी कहा जाता है) में स्टोर किया जाता है। इसकी तुलना में, इनिशियलाइज़ किए गए स्टैटिक वेरिएबल्स को इनिशियलाइज़्ड डेटा सेगमेंट में स्टोर किया जाता है।
इसका एक उदाहरण इस प्रकार दिया गया है -
static int x = 5; static int y; The static variable x is stored in the initialized data segment and the static variable y is stored in the BSS segment.
एक प्रोग्राम जो 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; }
फ़ंक्शन मुख्य () में, फ़ंक्शन 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());