सी प्रोग्रामिंग भाषा में, कोन्स्टेंट एक मान या डेटा आइटम होता है जिसकी मान्यता कार्यक्रम क्रियान्वयन के दौरान बदल नहीं सकती। कोन्स्टेंट विभिन्न डेटा प्रकारों, जैसे पूर्णांक कोन्स्टेंट, वर्ण कोन्स्टेंट, फ्लोटिंग-पॉइंट कोन्स्टेंट और स्ट्रिंग कोन्स्टेंट हो सकते हैं। कोन्स्टेंट का उपयोग प्रोग्राम में निर्धारित मानों को स्थायी रूप से संग्रहित करने के लिए किया जाता है। कोन्स्टेंट को 'const' कीवर्ड का उपयोग करके घोषित किया जाता है और इसे वेरिएबल की तरह एक्सप्रेशन और असाइनमेंट में उपयोग किया जा सकता है।




# कांस्टेंट दो तरह के होते है जो की नीचे लिखे गए है | 

1. Primary constant 
2 .Secondary constant 


# प्राथमिक कोन्स्टेंट (Primary constant) सी भाषा में एक प्रकार के कोन्स्टेंट होते हैं जो कि निम्नलिखित होते हैं:

  1. पूर्णांक कोन्स्टेंट (Integer constant): पूर्णांक कोन्स्टेंट एक पूर्णांक होता है, जो कि दशमलव अंश के बिना होता है। यह अधिकतम 10 अंकों का होता है। उदाहरण के लिए, 123, 456, -789 आदि।

  2. फ्लोटिंग-पॉइंट कोन्स्टेंट (Floating-point constant): फ्लोटिंग-पॉइंट कोन्स्टेंट एक संख्या होती है, जो कि दशमलव अंश के साथ होती है। यह वास्तविक संख्याओं को दर्शाता है। उदाहरण के लिए, 3.14, 6.02E23 आदि।

  3. वर्ण कोन्स्टेंट (Character constant): वर्ण कोन्स्टेंट एक वर्ण होता है जो एकाधिक वर्णों को दर्शाता है। वह एक वर्ण अवश्य होता है जो कि एकल होता है और इसे एकल अपोस्ट्रोफ़ में घेरा जाता है। उदाहरण के लिए, 'a', 'A', '#' आदि।

इन प्राथमिक कोन्स्टेंट का उपयोग सी प्रोग्राम में निर्दिष्ट मानों को स्थायी रूप से संग्रहित करने के लिए किया जाता है।


# Secondary constant (सेकेंडरी कांस्टेंट )सेकेंडरी कांस्टेंट ६ तरह के होते है | 

1. Array 
2. String 
3. Pointer 
4. Union 
5. Structure 
6. Enumerator 

1. Array: Array (अर्रे) सी भाषा में एक विशेष प्रकार का डेटा संरचना होता है, जो एक से अधिक आइटम को स्टोर करने की अनुमति देता है। एक अर्रे एक ही डेटा टाइप के आइटम का समूह होता है जिसके पास एक समान नाम होता है और जो स्क्रीन या फ़ाइल से इनपुट लेता है या स्क्रीन या फ़ाइल में आउटपुट देता है।

एक अर्रे का निर्माण निम्न विधि से किया जाता है:

Syntax: datatype arrayName[arraySize];

यहां, datatype आइटमों का डेटा टाइप होता है, arrayName अर्रे का नाम होता है और arraySize अर्रे में आइटमों की संख्या होती है।

उदाहरण के लिए, निम्नलिखित कोड एक इंटेजर अर्रे बनाता है:

Example: int numbers[5];

इस अर्रे में पांच इंटेजर आइटम होंगे जिन्हें numbers[0], numbers[1], numbers[2], numbers[3] और numbers[4] के रूप में उपयोग किया जा सकता है।

एक अर्रे के सभी आइटम समान डेटा टाइप के होते हैं और उन्हें 0 से शुरू किया जाता है। आइटम के नाम और आइटम के संख्या का उपयोग करके इसके साथ काम किया जाता है।


2. String: सी भाषा में स्ट्रिंग (String) एक वर्ण अथवा वर्णों का संग्रह होता है जो एक बड़े वर्णमाला में स्टोर किए जाते हैं। स्ट्रिंग डेटा टाइप को सी भाषा में करेक्टर एरे (Character Array) के रूप में प्रदर्शित किया जाता है।

एक सी भाषा में स्ट्रिंग निर्मित करने के लिए दो तरीके होते हैं। पहले तरीके में, स्ट्रिंग डेटा टाइप के लिए मेमोरी स्थान आवंटित किया जाता है और स्ट्रिंग के साथ उपयोग किए जाने वाले वर्ण उसमें भरे जाते हैं। दूसरे तरीके में, स्ट्रिंग एक साधारण करेक्टर एरे के रूप में प्रदर्शित की जाती है और इसमें स्ट्रिंग के अंत में नुल टर्मिनेटर (Null Terminator) जोड़ा जाता है।

निम्नलिखित कोड स्ट्रिंग एक्साम्पल देता है:

Syntax: char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

इस स्ट्रिंग में "Hello" वर्ण अथवा वर्णों का संग्रह है और अंत में एक नुल टर्मिनेटर है। इसे निम्नलिखित भी इस तरह लिखा जा सकता है:

Example: char greeting[] = "Hello";

3. Pointer: पॉइंटर (Pointer) सी भाषा में एक बहुत महत्वपूर्ण कॉन्सेप्ट है। पॉइंटर एक वेरीएबल होता है जो दूसरी वेरीएबल का पता (address) रखता है। पॉइंटर वेरीएबल की तरह भी स्टैक और हीप मेमोरी में डेटा स्टोर किए जा सकते हैं।

पॉइंटर डेटा टाइप उस डेटा टाइप के आधार पर परिभाषित होता है जिसका पता रखा जाना होता है। उदाहरण के लिए, एक इंटीजर पॉइंटर एक्सप्रेशन इंटीजर वेरीएबल के पते को रखता है और एक चार पॉइंटर एक्सप्रेशन चार वेरीएबल के पते को रखता है।

एक पॉइंटर को उस वेरीएबल के नाम से बनाया जा सकता है जिसका पता रखा जाना होता है, या एक सीधा मेमोरी एड्रेस से बनाया जा सकता है। पॉइंटर डेटा को उसके एड्रेस से या उसके डीरेक्शन से एक्सेस कर सकता है।

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

Example:  int var = 5;                 int *ptr

4. Union: यूनियन (Union) सी भाषा में एक डेटा स्ट्रक्चर है जो अनेक वेरीएबल्स को एक ही मेमोरी स्पेस में स्टोर करने की अनुमति देता है। यूनियन डेटा टाइप में एक से अधिक मेमोरी स्पेस उपयोग करते हुए, सबसे बड़ा मेमोरी स्पेस का उपयोग करते हुए डेटा स्टोर करता है।

यूनियन में अलग-अलग डेटा टाइप के वेरीएबल्स हो सकते हैं, लेकिन एक ही समय में केवल एक वेरीएबल एक्सेस किया जा सकता है। यह अंतिम वेरीएबल जिसे एक्सेस किया जाता है को जानता है और उसी मेमोरी स्पेस में स्टोर किए गए अन्य वेरीएबल्स को नष्ट नहीं करता है।

इस तरह का कोड यूनियन इस्तेमाल करता हुआ दिखता है:

Example:

union myUnion { int i; float f; char str[20]; }; int main() { union myUnion data; data.i = 10; printf("data.i : %d\n", data.i); data.f = 220.5; printf("data.f : %f\n", data.f); strcpy(data.str, "C Programming"); printf("data.str : %s\n", data.str); return 0; }

यहां, myUnion नाम का एक यूनियन बनाया गया है जो एक इंटीजर, एक फ्लोट और एक चार वेरीएबल्स को स्टोर करने की अनुमति देता है।

5. Structure: सी भाषा में स्ट्रक्चर (Structure) एक डेटा टाइप होता है जो अनेक वेरीएबल्स को एक ही नाम के अंतर्गत रखता है। स्ट्रक्चर में वेरीएबल्स को कम्पोनेंट्स कहा जाता है। स्ट्रक्चर के कम्पोनेंट्स अलग-अलग डेटा टाइप के हो सकते हैं।

एक स्ट्रक्चर को इस तरह बनाया जाता है:

struct student { int id; char name[20]; float percentage; };

इस स्ट्रक्चर में id, name, और percentage तीनों कम्पोनेंट हैं। id एक इंटीजर है, name एक चार अर्रे है, और percentage एक फ्लोट है।

इसके बाद, स्ट्रक्चर का वेरीएबल बनाने के लिए निम्न उदाहरण को देखें:

Example: struct student s1;

इस स्ट्रक्चर वेरीएबल s1 में, id, name, और percentage तीनों कम्पोनेंट्स होंगे। इसके बाद, कम्पोनेंट्स को इस तरह एक्सेस किया जा सकता है:

s1.id = 1; strcpy(s1.name, "John"); s1.percentage = 90.5;

स्ट्रक्चर में कम्पोनेंट्स को एक्सेस करने के लिए . ऑपरेटर का उपयोग किया जाता है। इस तरह से, s1 वेरीएबल के id कम्पोनेंट को एक्सेस करने के लिए, s1.id लिखा जाता है।

6. Enumerator: एनुमरेटर (Enumerator) सी भाषा में एक डेटा टाइप है जो एक नामित कन्स्टेंट के लिए एक अनुमानित मान या नम्बर के बीच मैपिंग करता है। एनुमरेटर का उपयोग इसलिए किया जाता है क्योंकि यह इंटीजर मानों को पढ़ने या लिखने के लिए अनुवाद करने की जरूरत नहीं होती है, जिससे प्रोग्राम को अधिक पढ़ने वाला बनाया जा सकता है।

एनुमरेटर को enum की घोषणा के साथ बनाया जाता है। निम्नलिखित उदाहरण में, एक week एनुमरेटर बनाया जा रहा है जो एक हफ्ते के दिनों के नामों को मैप करेगा:

Example:

enum week { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };

एनुमरेटर के बाद, एक वेरिएबल का उपयोग इस तरह से किया जाता है:

enum week today;

इसके बाद, today वेरिएबल में Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, या Sunday के नामों में से एक के बराबर मान हो सकता है:

today = Tuesday;

एनुमरेटर का उपयोग स्विच स्टेटमेंट्स, फंक्शन पैरामीटर्स, और संरचनाओं के मेंबर को रूपांतरित करने के लिए किया जाता है।