2013-04-26 4 views
8

इस topic के अनुसार, एक सरणी वस्तु के अंतिम तत्व के बाद एक के साथ सूचक की तुलना अनुमति दी है।सूचक तुलना ">" एक के साथ पहले एक सरणी के पहले तत्व आपत्ति

और करने के लिए @jalf टिप्पणी, एक सरणी वस्तु के पहले तत्व से पहले एक के साथ सूचक की तुलना अनुसार मना किया है।

example1

int array[10]; 
int *ptr; 
for(ptr=&array[9]; ptr>(array-1); ptr--) {...} 

example2

int array[10]; 
int *ptr; 
for(ptr=&array[9]; ptr>=(array); ptr--) {...} 

1) दोनों example1 और example2 मना कर रहे हैं?

2) क्या सी मानक से प्रमाण है कि के साथ पॉइंटर की तुलना किसी सरणी ऑब्जेक्ट के पहले तत्व से पहले एक है?

+2

कारण के कारण: विशेष 2 तत्वों का उपयोग करके तत्वों (सरणी के भीतर) के सभी स्लाइसों का प्रतिनिधित्व करने की अनुमति देता है। यदि आप स्लाइस के पहले और अंतिम तत्व को इंगित करना चाहते थे, तो आप खाली टुकड़े का प्रतिनिधित्व नहीं कर सके; लेकिन एक प्रतिनिधित्व के रूप में आधे खुली रेंज के द्वारा, आप कर सकते हैं: '[पी, पी) 'एक खाली टुकड़ा का प्रतिनिधित्व करता है। –

उत्तर

13
  1. हां, दोनों अपरिभाषित व्यवहार हैं: पहले मामले में, array-1 अपरिभाषित है; दूसरे मामले में, ptr पुनरावृत्ति के बाद घटित होने पर अपरिभाषित हो जाता है जब यह array के बराबर होता है।
  2. इस मानक की धारा 6.5.6 द्वारा कवर किया जाता, भाग 8 (जोर मेरा है):

एक अभिव्यक्ति पूर्णांक प्रकार है कि करने के लिए जोड़ा या एक सूचक से घटाया जाता है, तो परिणाम है सूचक ऑपरेटर का प्रकार। यदि सूचक ऑपरेटर किसी ऑब्जेक्ट ऑब्जेक्ट के तत्व को इंगित करता है, और सरणी काफी बड़ी है, तो परिणाम मूल तत्व से तत्व को ऑफ़सेट करने के लिए इंगित करता है जैसे परिणामी और मूल सरणी तत्वों की सबस्क्रिप्ट का अंतर पूर्णांक अभिव्यक्ति के बराबर होता है। दूसरे शब्दों में, अगर एक सरणी वस्तु, भाव (P)+N (समतुल्य रूप, N+(P)) और (P)-N (जहां N मूल्य n है) इंगित i-वें तत्व को अभिव्यक्ति P अंक के लिए क्रमश: i+n वें और i−n - सरणी वस्तु के वें तत्व, बशर्ते वे मौजूद हों। इसके अलावा, यदि अभिव्यक्ति P किसी सरणी ऑब्जेक्ट के अंतिम तत्व को इंगित करती है, तो अभिव्यक्ति (P)+1 एरे ऑब्जेक्ट के अंतिम तत्व से पहले एक बिंदु को इंगित करती है, और यदि अभिव्यक्ति Q किसी एक ऑब्जेक्ट ऑब्जेक्ट के अंतिम तत्व से पहले इंगित करती है, तो अभिव्यक्ति (Q)-1 अंक सरणी वस्तु के अंतिम तत्व के लिए। यदि दोनों पॉइंटर ऑपरेंड और परिणाम एक ही सरणी ऑब्जेक्ट के तत्वों को इंगित करते हैं, या सरणी ऑब्जेक्ट के अंतिम तत्व से पहले, मूल्यांकन एक अतिप्रवाह उत्पन्न नहीं करेगा; अन्यथा, व्यवहार अपरिभाषित है। यदि परिणाम एरे ऑब्जेक्ट के अंतिम तत्व से पहले एक बिंदु को इंगित करता है, तो इसका मूल्यांकन मूल्यांकन नहीं किया जाएगा, जिसका मूल्यांकन एक गैर * ऑपरेटर के ऑपरेंड के रूप में नहीं किया जाएगा।

मानक सरणी ऑब्जेक्ट के अंतिम तत्व से पहले स्थिति में तत्व को कवर करने के लिए मानक की लंबाई है, जबकि पहले तत्व से पहले स्थिति में तत्व उपरोक्त नियम के "अन्यथा" खंड के अंतर्गत आता है।

+0

उत्तर के लिए धन्यवाद। तो यह दूसरे विषय का एक ही पैराग्राफ है। मुझे पहली बार अच्छा नहीं मिला। व्याख्या के लिए धन्यवाद – MOHAMED

संबंधित मुद्दे