पहले, एएनएसआई प्रति/आईईसी 9899: 1999 (ई) §6.4.4.4:
10. एक पूर्णांक चरित्र निरंतर प्रकार int है। एक पूर्णांक वर्ण निरंतर का मान एक एकल वर्ण जिसमें एक एकल बाइट निष्पादन वर्ण को मानचित्रित किया गया है एक पूर्णांक के रूप में व्याख्या किए गए मैप किए गए वर्ण के प्रतिनिधित्व का संख्यात्मक मान है। [...]
§6.5.3.4:
2. sizeof ऑपरेटर अपनी संकार्य के आकार (बाइट्स में) है, जो एक अभिव्यक्ति या की parenthesized नाम हो सकता है पैदावार एक प्रकार। आकार ऑपरेंड के प्रकार से निर्धारित किया जाता है। [...]
3. जब एक संकार्य टाइप चार, अहस्ताक्षरित चार, या हस्ताक्षर किए चार, (या उसके एक योग्य संस्करण) है कि परिणाम है 1. [...]
के लिए आवेदन किया
जैसा कि आप देख सकते हैं, int
के लिए, sizeof('a')
के लिए हमें sizeof(int)
मिलता है, जो आपके प्लेटफ़ॉर्म पर 4 है।हालांकि, sizeof(c)
के लिए, हम जो होने के लिए 1.
तो क्यों न हम 'a'
एक char
को असाइन कर सकते परिभाषित किया गया है एक char
के आकार, मिल सकता है?
§6.5.16.1:
2. सरल काम (=) में, सही संकार्य के मूल्य में काम अभिव्यक्ति के प्रकार में बदल जाती है और द्वारा नामित वस्तु में संग्रहीत मूल्य बदल देता है बाएं ऑपरेंड।
तो, int
कि है 'a'
परोक्ष एक char
में बदल जाती है। वहां भी एक उदाहरण है, स्पष्ट रूप से दिखा रहा है कि int
एस को char
पर स्पष्ट रूप से परिवर्तित किया जा सकता है।
कंपाइलर स्मार्ट है। :) –
उत्सुकता से, 'आकार (' ए ')' सी और सी ++ के बीच अंतरों में से एक है (इसलिए उत्तरार्द्ध पूर्व का सख्त सुपरसेट नहीं है): सी में, 'sizeof (' a ') == sizeof (int) ', सी ++ में, 'sizeof (' a ') == sizeof (char) == 1'। –