भाव x++
और ++x
दोनों एक परिणाम (मान) और एक पक्ष प्रभाव है।
x++
अभिव्यक्ति के परिणाम x
का वर्तमान मान है। पक्ष प्रभाव कि x
की सामग्री है द्वारा 1.
परिणाम अभिव्यक्ति ++x
की बढ़ती है, x
प्लस 1. के वर्तमान मूल्य पक्ष प्रभाव ऊपर के रूप में ही है।
ध्यान दें कि अभिव्यक्ति का मूल्यांकन करने के तुरंत बाद दुष्प्रभाव लागू नहीं किया जाना चाहिए; इसे केवल अगले अनुक्रम बिंदु से पहले लागू किया जाना है। उदाहरण के लिए, कोड
x = 1;
y = 2;
z = ++x + y++;
कोई गारंटी नहीं कि x
की सामग्री को पहले अभिव्यक्ति y++
मूल्यांकन किया जाता है संशोधित किया जाएगा, या यहां तक कि इससे पहले कि ++x + y++
का परिणाम (z
को सौंपा गया है न =
है और न ही +
ऑपरेटरों परिचय दिया है अनुक्रम बिंदु)। अभिव्यक्ति++x
2 का मूल्यांकन करता है, लेकिन यह संभव है कि परिवर्तनीय x
में z
के बाद मान 2 शामिल नहीं हो सकता है।
यह याद रखना महत्वपूर्ण है कि x++ + x++
जैसे अभिव्यक्तियों का व्यवहार स्पष्ट रूप से भाषा मानक द्वारा अपरिभाषित है; भविष्यवाणी करने का कोई अच्छा (अच्छा) तरीका नहीं है कि अभिव्यक्ति का नतीजा क्या होगा, या मूल्यांकन के बाद x
का मूल्य क्या होगा। इसलिए *p++
की तरह भाव *(p++)
(यानी, आप अभिव्यक्ति p++
के परिणाम के *
ऑपरेटर लागू कर रहे हैं) के रूप में पार्स कर रहे हैं
पोस्टफिक्स ऑपरेटरों, एकल ऑपरेटरों की तुलना में अधिक पूर्वता है। फिर, p++
अभिव्यक्ति का परिणाम p
का वर्तमान मान है, इसलिए while (*p++=*q++);
पहला तत्व नहीं छोड़ता है।
ध्यान दें कि ऑटोइनक्रिकमेंट/कमी ऑपरेटर के लिए ऑपरेशन lvalue होना चाहिए (अनिवार्य रूप से, एक अभिव्यक्ति जो स्मृति स्थान को संदर्भित करती है जैसे स्मृति को पढ़ या संशोधित किया जा सकता है)। अभिव्यक्ति का परिणाम x++
या ++x
एक lvalue नहीं है, इसलिए आप ++x++
या (x++)++
या ++(++x)
जैसी चीजें नहीं लिख सकते हैं।आप कुछ लिख सकते हैं जैसे ++(*p++)
(p++
एक लाभा नहीं है, लेकिन *p++
है), हालांकि शायद आपको अपना कोड पढ़ने वाले किसी भी व्यक्ति द्वारा थप्पड़ मार दिया जाएगा।
स्रोत
2011-08-30 21:45:24
पोस्ट/प्री की आपकी परिभाषाएं पीछे की ओर प्रतीत होती हैं। पोस्ट = बाद, पूर्व = पहले। यहां वृद्धि के बाद से पता चलता है कि पहला चरित्र कॉपी किया जाएगा, तो पॉइंटर बढ़ाया जाएगा। – Marlon
क्यों सी ++ टैग (और शीर्षक)? यह एक सी पुस्तकालय समारोह है। –
मुझे पूरी तरह वैध सी ++ कोड की तरह दिखता है, @ पॉल। तो क्यों नहीं * सी ++ टैग? –