Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C भाषा में const टाइप क्वालिफायर (Constant Type Qualifier)

टाइप क्वालिफायर क्या हैं?

टाइप क्वालिफायर C प्रोग्रामिंग भाषा में मौजूदा डेटा प्रकारों में विशेष विशेषताएं जोड़ते हैं।

C में तीन टाइप क्वालिफायर हैं: const, volatile, restrict (C99)।

const क्वालिफायर

const इंगित करता है कि डेटा प्रारंभिकरण के बाद बदला नहीं जा सकता।

कॉन्स्टेंट के तीन प्रकार

1. लिटरल कॉन्स्टेंट्स (साक्षर स्थिरांक)

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


int a = b + 7;  // यहां '7' लिटरल कॉन्स्टेंट है
float pi = 3.14; // 3.14 लिटरल कॉन्स्टेंट

2. डिफाइंड कॉन्स्टेंट्स (परिभाषित स्थिरांक)

ये #define प्रीप्रोसेसर कमांड का उपयोग करते हैं।


#define PI 3.1415
#define MAX_SIZE 100

3. मेमोरी कॉन्स्टेंट्स (मेमोरी स्थिरांक)

ये const क्वालिफायर का उपयोग करते हैं, जो इंगित करता है कि डेटा बदला नहीं जा सकता।

सिंटैक्स


const प्रकार पहचानकर्ता = मान;

उदाहरण


const float PI = 3.14159;
const int MAX = 100;
const char *MESSAGE = "Hello";

उदाहरण प्रोग्राम


#include <stdio.h>

#define PI 3.1415  // डिफाइंड कॉन्स्टेंट

int main() {
    const float cpi = 3.14;  // मेमोरी कॉन्स्टेंट
    
    printf("लिटरल कॉन्स्टेंट = %f\n", 3.14);
    printf("डिफाइंड कॉन्स्टेंट = %f\n", PI);
    printf("मेमोरी कॉन्स्टेंट = %f\n", cpi);
    
    // cpi = 3.15;  // कंपाइल त्रुटि: असाइनमेंट ऑफ रीड-ओनली वेरिएबल
    
    return 0;
}

आउटपुट


लिटरल कॉन्स्टेंट = 3.140000
डिफाइंड कॉन्स्टेंट = 3.141500
मेमोरी कॉन्स्टेंट = 3.140000

const के उन्नत उपयोग

1. const पॉइंटर्स के साथ


// पॉइंटर टू कॉन्स्ट: मान नहीं बदल सकता
const int *ptr1;
int const *ptr2;  // समान

// कॉन्स्टेंट पॉइंटर: पता नहीं बदल सकता
int *const ptr3 = &var;

// कॉन्स्टेंट पॉइंटर टू कॉन्स्ट: दोनों नहीं बदल सकते
const int *const ptr4 = &var;

2. const फ़ंक्शन पैरामीटर्स के साथ


// फ़ंक्शन सरणी को संशोधित नहीं कर सकता
void printArray(const int arr[], int size) {
    for (int i = 0; i < size; i++)
        printf("%d ", arr[i]);
}

// फ़ंक्शन स्ट्रिंग को संशोधित नहीं कर सकता
int stringLength(const char *str) {
    int len = 0;
    while (str[len]) len++;
    return len;
}

3. const रिटर्न टाइप के साथ


// रिटर्न किया गया पॉइंटर संशोधित नहीं किया जा सकता
const char* getErrorMessage(int code) {
    static const char *messages[] = {
        "कोई त्रुटि नहीं",
        "फ़ाइल नहीं मिली",
        "मेमोरी त्रुटि"
    };
    return messages[code];
}

4. const संरचना सदस्यों के साथ


struct Config {
    const int version;     // प्रारंभिकरण के बाद अपरिवर्तनीय
    const char *name;      // पॉइंटर अपरिवर्तनीय (स्ट्रिंग लिटरल के लिए)
};

struct Config cfg = {1, "MyApp"};
// cfg.version = 2;  // त्रुटि

const vs #define

पहलूconst#define
टाइप चेकिंगहांनहीं (टेक्स्ट प्रतिस्थापन)
स्कोपब्लॉक/फ़ाइल स्कोपग्लोबल (परिभाषा के बाद)
डिबगिंगडिबगर में दृश्यमानडिबगर में अदृश्य
मेमोरीस्टोरेज आवंटित कर सकता हैकोई स्टोरेज नहीं
पता लेनासंभवअसंभव
पसंदआधुनिक C में पसंदीदासरल स्थिरांकों के लिए ठीक

संक्षेप

  • const टाइप-सेफ स्थिरांक प्रदान करता है
  • कंपाइल-टाइम त्रुटि पकड़ता है यदि संशोधन का प्रयास किया जाता है
  • ऑप्टिमाइज़र को बेहतर कोड जनरेट करने में मदद करता है
  • #define पर प्राथमिकता दें (टाइप सेफ्टी के लिए)
  1. C भाषा में कैरेक्टर ऑपरेशन्स को समझें C भाषा में कैरेक्टर ऑपरेशन्स को समझें

    C प्रोग्रामिंग भाषा में कैरेक्टर (A-Z या a-z), अंक (0-9), व्हाइट स्पेस, या विशेष प्रतीक हो सकते हैं। घोषणा (Declaration) C प्रोग्रामिंग में कैरेक्टर ऑपरेशन्स के लिए घोषणा निम्नलिखित है: char a = A; // कैरेक्टर कॉन्स्टेंट का उपयोग करके कैरेक्टर इनपुट/आउटपुट फंक्शन्स कैरेक्टर इनपुट/आउटपुट फंक्शन्स

  1. C भाषा में यूनियन टू पॉइंटर (Union to Pointer) C भाषा में यूनियन टू पॉइंटर (Union to Pointer)

    यूनियन (Union) क्या है? यूनियन एक यूजर-डिफाइंड डेटा प्रकार है जो एक ही मेमोरी स्थान को विभिन्न डेटा प्रकारों के सदस्यों के लिए साझा करने की अनुमति देता है। किसी भी समय केवल एक सदस्य ही मान रख सकता है। यूनियन की घोषणा union यूनियन_नाम { डेटा_प्रकार सदस्य1; डेटा_प्रकार सदस्य2; // ... };

  1. C भाषा में पॉइंटर एक्सेस करने की अवधारणा C भाषा में पॉइंटर एक्सेस करने की अवधारणा

    पॉइंटर घोषणा, प्रारंभिकरण और एक्सेस 1. सामान्य चर int qty = 179; // मेमोरी में: पता 1000 पर मान 179 संग्रहीत 2. पॉइंटर घोषणा int *p; // p एक पॉइंटर चर है जो int का पता रख सकता है 3. पॉइंटर प्रारंभिकरण int qty = 175; int *p; p = &qty; // एड्रेस-ऑफ ऑपरेटर (&) से पता प्राप्त करें मेमोरी आर