जब मान सीधे आकार-प्रकार ऑपरेटर के पास होता है, तो डेटा का आकार भिन्न क्यों होता है?


15
#include <stdio.h>
int main() {
    char a = 'A';
    int b = 90000;
    float c = 6.5;
    printf("%d ",sizeof(6.5));
    printf("%d ",sizeof(90000));
    printf("%d ",sizeof('A'));
    printf("%d ",sizeof(c));
    printf("%d ",sizeof(b));
    printf("%d",sizeof(a));
    return 0;
}

आउटपुट है:

8 4 4 4 4 1

समान मूल्यों के लिए आउटपुट अलग क्यों है?


12
6.5एक फ्लोट नहीं है, यह double
नाथनऑलवर

printf("%d",sizeof(6.5f));इसे बनाने के लिए एक float
जॉनी मोप

2
"क्यों उत्पादन यहाँ differen0t है?" ऐसा ही क्यों होना चाहिए? तथ्य यह है कि आप एक दूसरे को असाइन कर सकते हैं इसका मतलब यह नहीं है कि उनके पास एक ही प्रकार है।
स्लाव

5
उदाहरण के लिए प्रारूप विनिर्देशक होना चाहिए,printf("%zu", sizeof(6.5));
वेदर

जवाबों:


9

C में चरित्र स्थिरांक (C ++ के विपरीत) का प्रकार है int। तो यह पुकार

printf("%d",sizeof('A'));

आउटपुट 4. यह sizeof( 'A' )बराबर है sizeof( int )

C मानक से (6.4.4.4 वर्ण स्थिरांक)

10 एक पूर्णांक वर्ण स्थिर प्रकार int है ....

दूसरी ओर (6.5.3.4 आकार और संरेखित ऑपरेटर)

4 जब आकार को एक ऑपरेंड पर लागू किया जाता है जिसमें टाइप चार, अहस्ताक्षरित चार, या हस्ताक्षरित चार, (या एक गुण there एड संस्करण) होता है, तो परिणाम 1 होता है।

तो sizeofइस अभिव्यक्ति में ऑपरेटर sizeof( 'A' )का प्रकार इस अभिव्यक्ति में रहते हुए टाइप sizeof( a )किया जाता है जहां इस तरह की घोषणा की जाती है

char a = 'A';

ऑपरेंड का प्रकार है char

इस तरह से कॉल पर ध्यान दें

printf("%d",sizeof(6.5));

गलत रूपांतरण प्रारूप विनिर्देशक का उपयोग करें। आपको लिखना होगा

printf("%zu",sizeof(6.5));

इसके अलावा उपरोक्त कॉल doubleमें इस कॉल में रहते हुए एक प्रकार का एक निरंतर उपयोग किया जाता है

printf("%zu",sizeof(c));

चर cप्रकार है float

इन कॉलों के लिए आप एक ही परिणाम प्राप्त कर सकते हैं यदि पहली कॉल ने फ़्लोट के प्रकार का निरंतर उपयोग किया हो

printf("%zu",sizeof(6.5f));

19

वैरिएबल की तरह कांस्टेंट का अपना एक प्रकार है:

  • 6.5 : प्रकार का एक स्थिर बिंदु स्थिरांक double
  • 90000: एक पूर्णांक स्थिरांक प्रकार int(यदि int32 बिट है) या long(यदिint 16 बिट्स है)
  • 'A' : intC और charC ++ में टाइप का एक स्थिर चरित्र

जो आकार मुद्रित होते हैं, वे उपरोक्त प्रकार के आकार होते हैं।

इसके अलावा, sizeofऑपरेटर के परिणाम के प्रकार हैं size_t। इसलिए जब उचित प्रारूप का उपयोग करने के लिए निर्दिष्ट मुद्रण है %zu, नहीं %d


1

क्योंकि मानों से कोई फर्क नहीं पड़ता sizeof। यह प्रकारों का आकार है।

  • चरित्र स्थिरांक ints हैं, नहींchar s ।

  • फ्लोटिंग प्वाइंट स्थिरांक हैं डिफ़ॉल्ट रूप से doubleहै जब तक कि आप उन लोगों के साथ प्रत्यय fया l

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.