यदि आप जोड़ने 0
a
, तो a
पहले प्रकार int(*)[2]
(प्रकार int[3][2]
की एक सरणी के पहले तत्व की ओर इशारा करते) के एक सूचक मूल्य में बदल जाती है। उसके बाद 0
उसमें जोड़ा गया है, जो उस सूचक मूल्य से प्रतिनिधित्व किए गए पते पर 0 * sizeof(int[2])
बाइट जोड़ता है। चूंकि वह गुणा 0 उत्पन्न करता है, यह वही सूचक मूल्य उत्पन्न करेगा। चूंकि यह एक सूचक है, sizeof(a+0)
एक सूचक का आकार उत्पन्न करता है, जो आपके बॉक्स पर 8 बाइट्स है।
आप sizeof(a)
करते हैं, वहाँ संकलक एक सूचक मूल्य के लिए a
कन्वर्ट करने के लिए कोई कारण नहीं है (कि केवल समझ में आता है अगर आप सूचकांक तत्वों करना चाहते हैं या सूचक तत्वों का पता शामिल गणित करने के लिए) है। तो अभिव्यक्ति a
एक सरणी प्रकार का रहता है, और आपको int(*)[2]
के आकार के बजाय int[3][2]
का आकार मिलता है। तो, 3 * 2 * sizeof(int)
जो आपके बॉक्स पर 24 बाइट्स है।
आशा है कि यह चीजों को स्पष्ट करे।
स्रोत
2011-10-13 19:07:01
कॉलिंग 'आकार (ए +0)' कॉलिंग 'आकार (एक [0])' जैसा ही है, जो सरणी में पहले 'int [2] 'तत्व का आकार ले रहा है, इसलिए' sizeof (int) * 2 = 8'। यह एक सूचक का आकार नहीं ले रहा है। –
@ रेमी मैं इस बात की सराहना करता हूं कि क्या आप उस सिद्धांत को तैयार करेंगे और इसे पेपर –
@ रेमीलेबेउ-टीमबी के रूप में पोस्ट करेंगे: 'एक [0]' '(ए + 0)' के बराबर है, '(ए +0)' । –