sizeof
प्रकार और भाव साथ काम करता है। जब आप इसे किसी प्रकार पर लागू करते हैं, तो ()
sizeof
सिंटैक्स का हिस्सा हैं: sizeof(type)
। जब आप इसे अभिव्यक्ति पर लागू करते हैं ()
sizeof
वाक्यविन्यास का हिस्सा नहीं हैं: sizeof expression
।
तो आपका दूसरा sizeof
वास्तव में "एक चर पर लागू नहीं है"। यह (f)
अभिव्यक्ति पर लागू होता है। उस अभिव्यक्ति में की एक अनावश्यक जोड़ी में संलग्न एकल चर f
शामिल है। आप ()
की उस अनावश्यक जोड़ी के बिना भी कर सकते हैं और केवल sizeof f
का उपयोग कर सकते हैं।
जब sizeof
अभिव्यक्ति पर लागू होता है, तो यह अभिव्यक्ति परिणाम का आकार देता है (यानी अभिव्यक्ति के प्रकार का आकार)। आपके उदाहरण में sizeof
दोनों अनुप्रयोगों को एक ही मूल्य का मूल्यांकन करने की गारंटी है।
वास्तव में, एक अच्छा प्रोग्रामिंग अभ्यास sizeof(type)
से जितना संभव हो सके से बचने के लिए है, यानी sizeof expression
का उपयोग करना पसंद करते हैं। यह आपके कोड को अधिक प्रकार-स्वतंत्र बनाता है, जो हमेशा एक अच्छी बात है। टाइप नाम घोषणाओं में हैं और कहीं और नहीं।
क्या आपने गुगलिंग "आकार पर लागू आकार" का प्रयास किया था? पहले दो परिणाम (जिनमें से एक स्टैक ओवरफ्लो से है) आपके प्रश्न का उत्तर देने में सक्षम होंगे। –
हां, दोनों 'आकार' अभिव्यक्तियां समान मान लौटाती हैं। ध्यान दें कि दूसरे को कोष्ठक की आवश्यकता नहीं है; 'sizeof' एक ऑपरेटर है, फ़ंक्शन नहीं। लेकिन '% u' को 'unsigned int' प्रकार का तर्क चाहिए, न कि 'size_t'। इसे लिखें: 'printf ("% zu% zu \ n", sizeof (struct foo), आकार का f); 'या यह:' printf ("% lu% lu \ n", (हस्ताक्षरित लंबा) आकार (संरचना foo) , (हस्ताक्षर किए गए लंबे) आकार एफ); '। '% zu' एक सी 99-विशिष्ट सुविधा है; आपके सिस्टम का 'printf' mignt इसका समर्थन नहीं करता है। –