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

C भाषा में अप्रत्यक्ष और स्पष्ट प्रकार रूपांतरण (Implicit and Explicit Type Conversion)


प्रकार रूपांतरण (Type Conversion)

एक डेटा प्रकार के मान को दूसरे डेटा प्रकार में बदलना। दो प्रकार:

  1. अप्रत्यक्ष (Implicit) - कंपाइलर स्वतः करता है
  2. स्पष्ट (Explicit) - प्रोग्रामर कास्ट ऑपरेटर से करता है

1. अप्रत्यक्ष प्रकार रूपांतरण (Implicit Type Conversion)

  • कंपाइलर द्वारा स्वतः जब ऑपरेंड्स अलग प्रकार के हों
  • छोटा प्रकार → बड़ा प्रकार (प्रकार प्रोमोशन)
  • कोई डेटा हानि नहीं (आमतौर पर)

उदाहरण


int i = 10;
float f = 3.14;
double d = 2.71;

double result = i + f + d;
// i → float → double
// f → double
// अंतिम परिणाम double

प्रकार पदानुक्रम (रैंक)

long double (उच्चतम)
    ↑
double
    ↑
float
    ↑
unsigned long long
    ↑
long long
    ↑
unsigned long
    ↑
long
    ↑
unsigned int
    ↑
int (डिफ़ॉल्ट प्रोमोशन लक्ष्य)
    ↑
unsigned short / short
    ↑
unsigned char / char (निम्नतम)

उदाहरण: अप्रत्यक्ष रूपांतरण


#include <stdio.h>

int main() {
    int i = 40;
    float a;
    
    a = i;  // int → float अप्रत्यक्ष
    printf("अप्रत्यक्ष मान: %f\n", a);  // 40.000000
    return 0;
}

2. स्पष्ट प्रकार रूपांतरण (Explicit Type Conversion / Casting)

  • प्रोग्रामर द्वारा (type) ऑपरेटर से
  • बड़े प्रकार से छोटे में → डेटा हानि संभव
  • रनटाइम जांच नहीं (C में)

सिंटैक्स


(type_name) expression

उदाहरण: स्पष्ट रूपांतरण


#include <stdio.h>

int main() {
    int i = 40;
    short a;
    
    a = (short)i;  // स्पष्ट कास्ट
    printf("स्पष्ट मान: %d\n", a);  // 40
    
    // डेटा हानि उदाहरण
    int big = 100000;
    short small = (short)big;  // ओवरफ्लो!
    printf("बड़ा: %d, छोटा: %d\n", big, small);  // 100000, -31072 (implementation-defined)
    
    return 0;
}

उदाहरण: लूप में कास्टिंग


// अप्रत्यक्ष (कंपाइलर करता है)
for (int x = 97; x <= 122; x++)
    printf("%c", x);  // %c int को char मानता है

// स्पष्ट (प्रोग्रामर करता है)
for (int x = 97; x <= 122; x++)
    printf("%c", (char)x);  // इरादा स्पष्ट

तुलना

पहलूअप्रत्यक्षस्पष्ट
कौन करता हैकंपाइलरप्रोग्रामर
सिंटैक्सकोई अतिरिक्त नहीं(type)expr
दिशाछोटा → बड़ाकोई भी दिशा
डेटा हानिनहीं (आमतौर पर)संभव
पठनीयताछिपा हुआइरादा स्पष्ट
चेतावनीकमअधिक (यदि संकीर्ण)

सावधानियाँ

⚠ सामान्य गलतियाँ

  • पॉइंटर कास्ट: (int*)ptr - अलाइनमेंट/सख्त उपनाम उल्लंघन
  • कॉन्स्ट कास्ट: (int*)const_ptr - अपरिभाषित व्यवहार यदि मूल const
  • फंक्शन पॉइंटर: असंगत सिग्नेचर कास्ट करना UB
  • फ्लोट → इंट: कटौती (truncation), राउंडिंग नहीं

सर्वोत्तम अभ्यास

  • स्पष्ट कास्ट तभी जब आवश्यक हो
  • संकीर्ण रूपांतरण (narrowing) से बचें या जांचें
  • intptr_t/uintptr_t पॉइंटर-इंट कन्वर्जन के लिए
  • C11 _Generic टाइप-जेनेरिक मैक्रोज़ के लिए
  1. C भाषा में विभिन्न पॉइंटर ऑपरेशन्स और पॉइंटर्स की समस्याएं C भाषा में विभिन्न पॉइंटर ऑपरेशन्स और पॉइंटर्स की समस्याएं

    पॉइंटर एक वेरिएबल है जिसका मान दूसरे वेरिएबल का पता होता है, यानी मेमोरी लोकेशन का सीधा पता। किसी भी वेरिएबल या कॉन्स्टेंट की तरह, इसका उपयोग करने से पहले पॉइंटर घोषित करना आवश्यक है। मेमोरी प्रतिनिधित्व int qty = 179; मेमोरी में प्रतिनिधित्व: qty नामक वेरिएबल, पता 5000 पर, मान 179 संग्रहीत करता ह

  1. C भाषा में विभिन्न ऑपरेटर और एक्सप्रेशन C भाषा में विभिन्न ऑपरेटर और एक्सप्रेशन

    C भाषा में ऑपरेटर्स का परिचय ऑपरेटर डेटा पर ऑपरेशन करते हैं। इन्हें निम्न श्रेणियों में वर्गीकृत किया गया है: अंकगणितीय ऑपरेटर्स (Arithmetic Operators) संबंधपरक ऑपरेटर्स (Relational Operators) तार्किक ऑपरेटर्स (Logical Operators) असाइनमेंट ऑपरेटर्स (Assignment Operators) इन्क्रीमेंट और डिक्रीमेंट ऑ

  1. C भाषा में प्राथमिक डेटा टाइप्स (Primary Data Types) क्या हैं? C भाषा में प्राथमिक डेटा टाइप्स (Primary Data Types) क्या हैं?

    C कंपाइलर्स चार मौलिक डेटा टाइप्स का समर्थन करते हैं: इंटीजर (Integer) कैरेक्टर (Character) फ्लोटिंग-पॉइंट (Floating-point) डबल प्रिसिजन फ्लोटिंग-पॉइंट (Double precision floating-point) प्राथमिक डेटा टाइप्स इंटीग्रल डेटा टाइप (Integral Data Type) इंटीग्रल डेटा टाइप्स पूरे नंबर और कैरेक्टर्स स्टो