c - आकार 4(चार+चार) क्यों रिटर्न 4?




char sizeof (2)

char  a, b;     
printf("%d", sizeof(a+b));

प्रिंट करने के लिए स्क्रीन पर क्या लिखा होगा?

मुझे लगता है क्योंकि sizeof (char) = 1, उस आकार का (a + b) भी 1 होगा, लेकिन यह 4 हो गया। मुझे यह समझ में नहीं आता है, अगर हम दो वर्ण जोड़ते हैं तो यह 4 क्यों लिखता है?


यह sizeof(char) के समान नहीं है sizeof(char) , तर्क ( यानी इसके परिणामस्वरूप ) को int इतने sizeof(a + b) लिए प्रोन्नत किया जाता है, वास्तव में sizeof(int) बराबर है sizeof(int) यदि आपने परिणाम को char निकाल दिया है तो यह आपके लिए क्या उम्मीद होगी। इसके अलावा, sizeof परिणाम के लिए सही स्वरूप विनिर्देशक जो size_t %zu और %d नहीं है

प्रयत्न

printf("%zu", sizeof((char) (a + b)));

लगभग सभी अंकगणित ऑपरेटरों के सी भाषा संचालकों को सामान्य अंकगणितीय रूपांतरणों के रूप में निहित रूपांतरणों के अधीन किया जाता है या, इस मामले में, पूर्णांक पदोन्नति । टाइप char संचालन को प्रकार टाइप करने के लिए प्रोत्साहित किया जाता है और वास्तविक जोड़ int (या उस unsigned int के डोमेन के भीतर होता है, जो कि प्लेटफॉर्म पर char के गुणों के आधार पर होता है)। तो आपकी a + b वास्तव में (int) a + (int) b रूप में व्याख्या की जाती है। परिणाम में टाइप int और sizeof(int) आपके प्लेटफ़ॉर्म पर जाहिरा तौर पर 4 है। वह 4 है जो आप देखते हैं

और printf का परिणाम sizeof करने के लिए %d का उपयोग न करें। sizeof के sizeof का आकार size_t , जबकि %d को एक int तर्क की आवश्यकता है। इसलिए, या तो उचित प्रारूप विनिर्देशक का उपयोग करें

printf("%zu\n", sizeof(a+b));

या कम से कम तर्क देते हैं यदि आप सुनिश्चित हैं कि यह फिट बैठता है

printf("%d\n", (int) sizeof(a+b));




sizeof