मैं अभी हाल ही में एक मामले में आया था जहां ++a + 1 के समान नहीं है। कृपया कोड के नीचे दिए गए स्निपेट का विश्लेषण करें:

इनपुट 1 :

int a[] = {11, 12};
int *p = a + 1;
cout << *p;

आउटपुट 1:

12

इनपुट 2 :

int a[] = {11, 12};
int *p = ++a;
cout << *p;

आउटपुट २ :

error: lvalue required as increment operand


क्या कोई मुझे इस समस्या के पीछे का कारण बता सकता है?

-4
Ahmed 7 नवम्बर 2021, 17:33
2
पहला उदाहरण पुन: पेश नहीं कर सकता, यह मेरे लिए ठीक संकलित करता है। दूसरी तरफ नहीं है।
 – 
Quimby
7 नवम्बर 2021, 17:36
6
ऐसा लगता है कि आपने आउटपुट स्विच कर दिया है।
 – 
interjay
7 नवम्बर 2021, 17:38
5
मुझे लगता है कि आपने परिणाम को पीछे की ओर कॉपी किया है। a++ अमान्य है क्योंकि यह a को संशोधित करने का प्रयास करता है
 – 
Barmak Shemirani
7 नवम्बर 2021, 17:38
2
int *p = a + 1; int *p = &a[0] + 1; के बराबर है। आप एक सरणी नहीं बढ़ा सकते। (सरणी पॉइंटर्स नहीं हैं, और पॉइंटर्स सरणी नहीं हैं।)
 – 
molbdnilo
7 नवम्बर 2021, 18:55
मेरी पहली प्रतिक्रिया "बेशक" है। दोनों भावों के शब्दार्थ भिन्न हैं। उनमें से एक, ++a, a को संशोधित करता है जबकि दूसरा a+1 नहीं करता है। एक ऐसे मामले के बजाय जहां ये अभिव्यक्तियाँ समान नहीं हैं, क्या आप एक ऐसे मामले के साथ आ सकते हैं जहां वे हैं? (यदि आप ++a के समान शब्दार्थ के साथ एक व्यंजक चाहते हैं, तो (a += 1) को कोष्ठक के साथ आज़माएं ताकि संचालन के क्रम में कोई समस्या न हो।)
 – 
JaMiT
7 नवम्बर 2021, 19:58

1 उत्तर

सबसे बढ़िया उत्तर
  • पहला मामला: जब आप सरणी का नाम यानी a यहां पास कर रहे हैं, तो आप सरणी में संग्रहीत पहले मान का पता पास कर रहे हैं। इसलिए, जब: int *p = a+1; निष्पादित किया जाता है तो यह सरणी से पहला मान लेता है यानी 11 और फिर उस मान में 1 जोड़ा जाता है और आउटपुट 12 होता है। यह कोड आपको कोई त्रुटि नहीं देगा क्योंकि आप सरणी में या उसके बारे में कुछ भी नहीं बदल रहे हैं।
  • दूसरा मामला: आपको संकलन समय त्रुटि value required as increment operand मिलेगी। यहां आप ऐरे को बढ़ाने की कोशिश कर रहे हैं और आप ऐरे पर ही इंक्रीमेंट ऑपरेशन नहीं कर सकते।
-4
Igor Voltaic 8 नवम्बर 2021, 23:51
2
a+1 11 का मान बिल्कुल नहीं लेता और उस मान में 1 जोड़ देता है।
 – 
ChrisMM
7 नवम्बर 2021, 18:48
A+1 ने उस मान के लिए 11 और 1 का मान नहीं लिया लेकिन ऊपर मैंने उल्लेख किया कि int *p=a करते समय; यहां हम सरणी में संग्रहीत पहले मान का पता पास कर रहे हैं। अगर मैं कहीं गलत हूं तो मुझे समझने में मदद करें। मैं अभी भी सीख रहा हूँ
 – 
Neha Sharma
7 नवम्बर 2021, 19:19
1
a + 1, &a[1] के समान है, इसलिए p a[1] पर इंगित करता है, जिसमें 12 है। यदि आपके कहने का यही मतलब है, तो आपने गलती से इसके विपरीत लिख दिया।
 – 
user4581301
7 नवम्बर 2021, 19:38