सी ++ ऑपरेटर प्राथमिकता तालिका के अनुसार, पोस्ट-वृद्धि की प्राथमिकता dereference (*) ऑपरेटर से अधिक है, और पूर्व-वृद्धि और dereference ऑपरेटर की प्राथमिकता है। इसके अलावा पूर्व-वृद्धि और डीरेंसेंस ऑपरेटर दाएं-से-बाएं सहयोगी हैं।
तो पहली पंक्ति में (cout<<++*p<<std::endl;
), * और ++ का मूल्यांकन दाएं से बाएं (पहले अव्यवस्था, फिर वृद्धि) से किया जाता है। अब p
अभी भी पहली सरणी को इंगित करता है (क्योंकि यह नहीं बदला गया है), लेकिन (* पी) पहली स्ट्रिंग के दूसरे अक्षर को इंगित करता है (आउटपुट इस तथ्य को दिखाता है)।
दूसरी पंक्ति (cout<<*p++<<std::endl;
) हालांकि बाद वेतन वृद्धि पहले मूल्यांकन किया जाता है (p
के पुराने मूल्य पुन: प्राप्त करने के बाद) और p
में वृद्धि की जाती है और अब दूसरी सरणी की ओर इशारा करता है। लेकिन वृद्धि से पहले, पी का मूल्य अभिव्यक्ति में उपयोग किया जाता है और दूसरी पंक्ति के आउटपुट बिल्कुल पहली पंक्ति के रूप में होता है।
तीसरी पंक्ति में, पहले p
को संदर्भित किया गया है (दूसरी सरणी के पहले अक्षर को इंगित करें), फिर बढ़ाया गया (दूसरी सरणी के दूसरे अक्षर को इंगित करें), और मान मुद्रित किया गया है।
स्रोत
2012-02-20 10:49:52
ऑपरेटर पूर्वता। कुछ कोष्ठक जोड़ें और यह स्पष्ट हो जाएगा ... – jrok