सी ++ मानक [सेकंड 5.7] कहते हैं:क्या एक गैर-सरणी प्रकार का "एक-अतीत-अंत-अंत" सूचक सी ++ में मान्य अवधारणा है?
यदि दोनों सूचक संकार्य और एक ही सरणी वस्तु के तत्वों के परिणाम बिंदु, या एक अतीत सरणी वस्तु के अंतिम तत्व, मूल्यांकन नहीं किया जाएगा एक अतिप्रवाह पैदा करें; अन्यथा, व्यवहार अपरिभाषित है।
तो, क्या मैं यह मानने में सही हूं कि अन्य प्रकार के पॉइंटर्स अतीत की तुलना में एक-अतीत के अंतहीन हैं?
उदाहरण के लिए:
int a = 0;
vector<int> v(&a, (&a)+1);
ऊपर टुकड़ा संकलित करता है तथा (++ जी के साथ) बस ठीक काम करता है, लेकिन यह मान्य है?
मैं इस बारे में टिप्पणी करना चाहूंगा कि 'एरे के मुकाबले अन्य प्रकार के पॉइंटर्स एक-अतीत-अंत-अंत को अनिर्धारित हैं?'। ** पॉइंटर्स ** हमेशा परिभाषित किए जाते हैं, क्योंकि वे केवल संख्याएं, पते हैं। हालांकि इस सूचक द्वारा ** मान ** अनिर्धारित है। आपको इन पॉइंटर्स को अव्यवस्थित नहीं करना चाहिए। लेकिन 'वेक्टर' कन्स्ट्रक्टर उन्हें कम नहीं करता है, तो यह ठीक है। – NIA
सच है, लेकिन पता स्थान अनंत नहीं है। तो पता स्थान में अंतिम तत्व के लिए एक सूचक है। उस सूचक को बढ़ाने से कोई मतलब नहीं होगा। –
पॉइंटर्स केवल संख्या नहीं हैं। सी ++ मानक यह स्पष्ट करता है कि आप पॉइंटर्स के साथ मनमाने ढंग से अतिरिक्त और घटाव का उपयोग नहीं कर सकते हैं। विशेष रूप से 1-आधारित एल्गोरिदम को समायोजित करने के लिए किसी सरणी से पहले पॉइंटर का उपयोग करने का अभ्यास अपरिभाषित व्यवहार का कारण बनता है। AFAIK कंप्यूटर आर्किटेक्चर होने या उपयोग करने के लिए उपयोग किया जाता है, जहां एक मान लोड करना जो पॉइंटर रजिस्टर में मान्य मेमोरी को इंगित नहीं करता है, वह जाल पैदा कर सकता है। – JoergB