एक चर एक तार्किक निर्माण है जो एक एल्गोरिथ्म के इरादे से जाता है, जबकि एक मेमोरी स्थान एक भौतिक निर्माण है जो कंप्यूटर के संचालन का वर्णन करता है। सामान्यतया, किसी प्रोग्राम को निष्पादित करने के लिए एक चर की तार्किक धारणा और कंप्यूटर के भंडारण के बीच (कंपाइलर जनरेट) मैपिंग होती है।
(यहां तक कि असेंबली लैंग्वेज में भी हमारे पास (लॉजिकल) वैरिएबल का एक अल्गोरिथम और आशय है, और (फिजिकल) मेमोरी लोकेशन हैं, हालांकि वे असेंबली में ज्यादा कंफर्टेबल हैं।)
एक चर उच्च (एर) स्तर की अवधारणा है। एक चर या तो एक अज्ञात (गणित, या प्रोग्रामिंग असाइनमेंट के रूप में) या एक स्थान-धारक का प्रतिनिधित्व करता है जिसे मूल्य के साथ प्रतिस्थापित किया जा सकता है (जैसा कि प्रोग्रामिंग में: पैरामीटर)।
एक स्मृति स्थान एक निम्न (एर) स्तर की अवधारणा है। एक मेमोरी लोकेशन का इस्तेमाल किसी वैल्यू को स्टोर करने के लिए किया जा सकता है, कभी-कभी किसी वैरिएबल की वैल्यू को स्टोर करने के लिए। हालाँकि, CPU चर कुछ चर (यों) के मूल्य को संग्रहीत करने का एक और तरीका है। सीपीयू रजिस्टर भी कम (एर) स्तर के भंडारण स्थान हैं, लेकिन वे मेमोरी स्थान नहीं हैं क्योंकि उनके पास पते नहीं हैं, बस नाम हैं।
कुछ अर्थों में, एक चर कार्यक्रम के इरादे को व्यक्त करने के लिए अमूर्तता का एक तंत्र है, जबकि एक स्मृति स्थान प्रसंस्करण वातावरण की एक भौतिक इकाई है जो भंडारण और पुनः प्राप्ति प्रदान करता है।
प्रश्न ००३: क्या यह सच है कि एक पॉइंटर मेमोरी लोकेशन ० एक्स २३४५२ के अंदर स्टोर किया जाता है? क्यूं कर?
हम निश्चित रूप से नहीं कह सकते। सिर्फ इसलिए कि वहाँ एक मूल्य है जो एक पते के रूप में काम करेगा, इसका मतलब यह नहीं है कि यह पता है, इसके बजाय पूर्णांक (दशमलव) 144466 हो सकता है। हम मूल्यों की व्याख्या पर अनुमान नहीं लगा सकते हैं कि वे संख्यात्मक रूप से कैसे दिखाई देते हैं।
प्रश्न ००४: क्या यह सच है कि एक पॉइंटर मेमोरी लोकेशन ० एक्स २३४५२ के अंदर स्टोर किया जाता है? क्यूं कर?
यह वास्तव में एक अजीब सवाल है। वे बक्से के आधार पर कुछ मान्यताओं की उम्मीद करते हैं, हालांकि, ध्यान दें कि पते प्रत्येक बॉक्स के लिए 1 से बढ़ जाते हैं। किसी भी आधुनिक कंप्यूटर में, इसका मतलब यह होगा कि प्रत्येक बॉक्स एक बाइट धारण कर सकता है - बाइट पता अब दशकों के लिए आदर्श है। हालाँकि एक बाइट केवल 8-बिट्स है और 0 से 255 (अहस्ताक्षरित मानों) तक हो सकता है; अभी तक वे इन पतों में से एक के भीतर संग्रहीत एक बड़ा मूल्य दिखाते हैं, इसलिए बहुत संदिग्ध है। (यह काम कर सकता है अगर यह एक शब्द संबोधित मशीन थी, लेकिन यह ऐसा नहीं कहता है, और, आज कुछ मशीनें हैं, हालांकि कुछ पेशेवर मशीनें हैं।)
आपके द्वारा दिखाए गए चार फ्लैशकार्ड के आधार पर, मैं कुछ अलग तरीके से पॉइंटर्स को परिभाषित करूंगा:
एक पॉइंटर एक मेमोरी लोकेशन होता है जिसका मान किसी दूसरे मैमोरी लोकेशन का मेमोरी एड्रेस होता है।
जबकि ऐसी परिस्थितियाँ हैं जहाँ यह सोच सही है, आप यहाँ रूपकों का मिश्रण कर रहे हैं। एक चर की धारणा एल्गोरिदम और उसके इरादे पर जाती है - यह मानने की कोई आवश्यकता नहीं है कि सभी चर में स्मृति स्थान होते हैं। कुछ चर (विशेष रूप से सरणियों) में स्मृति स्थान होते हैं क्योंकि स्मृति स्थान पते का समर्थन करते हैं (जबकि सीपीयू रजिस्टर को केवल अनुक्रमित नहीं नाम दिया जा सकता है)।
निष्पादन के लिए, चर और कथन और प्रोसेसर मेमोरी लोकेशन और प्रोसेसर निर्देश अनुक्रम के बीच एक तार्किक मानचित्रण है। एक वैरिएबल जिसका मान कभी नहीं बदलता (जैसे एक स्थिर) को आवश्यक रूप से मेमोरी लोकेशन की भी आवश्यकता नहीं होती है, क्योंकि वैल्यू को पुन: उत्पन्न किया जा सकता है (जैसे कि कंपाइलर द्वारा उत्पन्न कोड अनुक्रमों के लिए आवश्यक)।
a
,0x23453
।nil
उनके अंदर सामान आदि मूल्य हैं। यह आपको स्पष्ट लग सकता है, लेकिन मैं उन सवालों के निर्णायक उत्तर देने में सहज नहीं रहूंगा, बिना यह देखे कि उन क्षेत्रों को कैसे परिभाषित किया जाता है। वास्तव में यह जानने का कोई तरीका नहीं है कि क्याa
दूसरी छवि में एक चरित्र है, एक स्ट्रिंग (यदि वे किसी भी अलग हैं), या एक चर का नाम। यदि यह एक तार है, तो क्याnil
एक तार भी है? या "शून्य" मान?