मैं सी प्रोग्रामिंग की समीक्षा कर रहा हूं और मुझे परेशान करने वाली कुछ चीजें हैं।
इस कोड को उदाहरण के लिए लेते हैं:
int myArray[5] = {1, 2, 2147483648, 4, 5};
int* ptr = myArray;
int i;
for(i=0; i<5; i++, ptr++)
printf("\n Element %d holds %d at address %p", i, myArray[i], ptr);
मुझे पता है कि एक int अधिकतम 2,147,483,647 धनात्मक मान रख सकता है। तो उस पर जाकर, यह अगले स्मृति पते पर "फैल" करता है जो तत्व 2 को उस पते पर "-2147483648" के रूप में प्रदर्शित करता है? लेकिन तब यह वास्तव में समझ में नहीं आता क्योंकि आउटपुट में यह अभी भी कहता है कि अगला पता 4 का मान रखता है, फिर 5. यदि नंबर अगले पते पर दिया गया था, तो उस पते पर संग्रहीत मान को नहीं बदलेगा ?
मुझे एमआइपी असेंबली में प्रोग्रामिंग से याद है और पते को प्रोग्राम चरण के दौरान मूल्यों को बदलते हुए देखते हैं कि उन पते पर असाइन किए गए मान बदल जाएंगे।
जब तक मैं गलत तरीके से याद नहीं कर रहा हूं तब तक यहां एक और सवाल है: यदि किसी विशिष्ट पते पर निर्दिष्ट संख्या प्रकार से बड़ी है (जैसे myArray [2]) तो क्या यह बाद के पते पर संग्रहीत मूल्यों को प्रभावित नहीं करता है?
उदाहरण: हमारे पास 0x10010000 पते पर int myNum = 4 बिलियन है। बेशक myNum 4 बिलियन स्टोर नहीं कर सकता है इसलिए यह उस पते पर कुछ नकारात्मक संख्या के रूप में प्रकट होता है। इस बड़ी संख्या को संग्रहीत करने में सक्षम नहीं होने के बावजूद, 0x10010004 के बाद के पते पर संग्रहीत मूल्य पर इसका कोई प्रभाव नहीं है। सही बात?
मेमोरी पतों में केवल संख्याओं / वर्णों के कुछ आकारों को रखने के लिए पर्याप्त स्थान होता है, और यदि आकार सीमा से अधिक हो जाता है, तो इसे अलग तरह से दर्शाया जाएगा (जैसे कि इंट में 4 बिलियन स्टोर करने की कोशिश करना लेकिन यह एक नकारात्मक संख्या के रूप में दिखाई देगा) और इसलिए इसका अगले पते पर संग्रहीत संख्या / वर्णों पर कोई प्रभाव नहीं पड़ता है।
माफ करना अगर मैं जहाज पर चला गया। मैं इस से पूरे दिन एक प्रमुख मस्तिष्क गोज़ रहा है।
int c = INT.MAXINT; c+=1;
देखें और देखें कि सी क्या हुआ।