एक चर और एक स्मृति स्थान के बीच अंतर क्या है? [बन्द है]


38

हाल ही में मैं फ़्लैशकार्ड के रूप में एक दृश्य तरीके से पॉइंटर्स समझाने की कोशिश कर रहा हूं।

प्रश्न ००१: यह कंप्यूटर मेमोरी में किसी स्थान का रेखाचित्र है। क्या यह सच है कि इसका पता है 0x23452? क्यूं कर?

यहाँ छवि विवरण दर्ज करें

उत्तर: हां, क्योंकि यह 0x23452बताता है कि कंप्यूटर इस स्थान को कहां खोज सकता है।


प्रश्न ००२: क्या यह सच है कि चरित्र bस्मृति स्थान के अंदर संग्रहीत है 0x23452? क्यूं कर?

यहाँ छवि विवरण दर्ज करें

उत्तर: नहीं, क्योंकि चरित्र aवास्तव में इसके अंदर संग्रहीत होता है।


प्रश्न ००३: क्या यह सच है कि एक पॉइंटर को मेमोरी लोकेशन के अंदर स्टोर किया जाता है 0x23452? क्यूं कर?

यहाँ छवि विवरण दर्ज करें

उत्तर: हां, क्योंकि मेमोरी लोकेशन 0x34501का पता इसके अंदर जमा होता है।


प्रश्न ००४: क्या यह सच है कि एक पॉइंटर को मेमोरी लोकेशन के अंदर स्टोर किया जाता है 0x23452? क्यूं कर?

यहाँ छवि विवरण दर्ज करें

उत्तर: हां, क्योंकि किसी अन्य मेमोरी लोकेशन का पता इसके अंदर स्टोर होता है।


अब उस हिस्से के लिए जिसने मुझे चिंतित कर दिया है। एक सॉफ्टवेयर इंजीनियर ने मुझे इस तरह संकेत दिया:

पॉइंटर एक वैरिएबल होता है जिसका मान दूसरे वेरिएबल का मेमोरी एड्रेस होता है।

आपके द्वारा दिखाए गए चार फ्लैशकार्ड के आधार पर, मैं कुछ अलग तरीके से पॉइंटर्स को परिभाषित करूंगा:

एक पॉइंटर एक मेमोरी लोकेशन होता है जिसका मान किसी दूसरे मैमोरी लोकेशन का मेमोरी एड्रेस होता है।

क्या यह कहना सुरक्षित है कि एक चर स्मृति स्थान के समान है?

यदि नहीं, तो किसका अधिकार है? एक चर और एक स्मृति स्थान के बीच अंतर क्या है?


37
वहाँ एक अंतर्निहित धारणा है कि यहाँ हर कोई उन चित्रों को पढ़ने के अपने इरादे कि बॉक्स के तहत हेक्साडेसिमल संख्या एक स्मृति पता है पता चल जाएगा, और कि a, 0x23453nilउनके अंदर सामान आदि मूल्य हैं। यह आपको स्पष्ट लग सकता है, लेकिन मैं उन सवालों के निर्णायक उत्तर देने में सहज नहीं रहूंगा, बिना यह देखे कि उन क्षेत्रों को कैसे परिभाषित किया जाता है। वास्तव में यह जानने का कोई तरीका नहीं है कि क्या aदूसरी छवि में एक चरित्र है, एक स्ट्रिंग (यदि वे किसी भी अलग हैं), या एक चर का नाम। यदि यह एक तार है, तो क्या nilएक तार भी है? या "शून्य" मान?
ilkkachu

39
प्रश्न 1 एक बुरा प्रश्न है। यह कुछ ऐसा है जो आपको पाठकों को बताने की जरूरत है इससे पहले कि वे अन्य प्रश्नों का उत्तर दे सकें। एक प्रश्न के बजाय, यह पाठक को दी गई जानकारी होनी चाहिए: "निम्नलिखित प्रश्नों में, बक्से स्मृति स्थान हैं और नीचे दिए गए हेक्स नंबर उनके पते हैं"।
17 की 26

15
प्रश्न 3 के संदर्भ को देखते हुए उत्तर देना असंभव है। बाइट स्तर पर यह बताने का कोई तरीका नहीं है कि मेमोरी में संग्रहीत मूल्य की व्याख्या कैसे की जाती है / आवेदन स्तर पर उपयोग की जाती है।
17 की 26

6
वर्थ नोटिंग: यहां आप जो कुछ भी लिख रहे हैं, वह C या C ++ के लिए सही है, लेकिन मूल रूप से किसी भी भाषा के लिए गलत है, जिसमें स्पष्ट पॉइंटरिंग रेफरेंस / डेरेफेरिंग नहीं है। चर के पूरे रूपक जो कि स्लॉट होते हैं, जो मान एक भाषा के लिए टूट जाते हैं (जैसे पायथन, या जावा, या सी #, या रूबी, या जावास्क्रिप्ट, या कई अन्य) जहां असाइनमेंट सिर्फ एक वस्तु के बिना परिवर्तन के लिए एक चर बिंदु बनाता है। , और वस्तु के लिए उत्परिवर्तन इसे इंगित करने वाले सभी चर के माध्यम से दिखाई देते हैं। पाइथन का प्रलेखन इस कारण से ऑब्जेक्ट्स पर लटकाए गए nametags के रूप में चर के वैकल्पिक रूपक का उपयोग करता है।
मार्क अमेरी

19
BTW, और मुझे क्षमा करें यदि आप पहले से ही इसे समझते हैं, लेकिन ऐसा लगता है कि यह एक भ्रम की स्थिति हो सकती है - यह "0x23452" अंकन हेक्साडेसिमल प्रारूप में एक संख्या को निरूपित करने का एक तरीका है, और यह सिर्फ सुविधा के लिए किया गया है। लेकिन यह सिर्फ एक संख्या है - किसी भी तरह से 0x उपसर्ग को निरूपित नहीं करता है कि यह एक सूचक है, जो मेमोरी में संग्रहीत है वह शाब्दिक रूप से केवल एक व्यर्थ संख्या है (आप सादे दशमलव पूर्णांक के साथ मेमोरी स्थानों को लेबल कर सकते हैं)। अर्थ (यानी, संख्या की व्याख्या कैसे की जानी चाहिए) भाषा से आती है - चर का प्रकार और इसका उपयोग करने का तरीका।
फिलिप मिलोवानोविक

जवाबों:


69

एक चर एक तार्किक निर्माण है जो एक एल्गोरिथ्म के इरादे से जाता है, जबकि एक मेमोरी स्थान एक भौतिक निर्माण है जो कंप्यूटर के संचालन का वर्णन करता है। सामान्यतया, किसी प्रोग्राम को निष्पादित करने के लिए एक चर की तार्किक धारणा और कंप्यूटर के भंडारण के बीच (कंपाइलर जनरेट) मैपिंग होती है।

(यहां तक ​​कि असेंबली लैंग्वेज में भी हमारे पास (लॉजिकल) वैरिएबल का एक अल्गोरिथम और आशय है, और (फिजिकल) मेमोरी लोकेशन हैं, हालांकि वे असेंबली में ज्यादा कंफर्टेबल हैं।)

एक चर उच्च (एर) स्तर की अवधारणा है। एक चर या तो एक अज्ञात (गणित, या प्रोग्रामिंग असाइनमेंट के रूप में) या एक स्थान-धारक का प्रतिनिधित्व करता है जिसे मूल्य के साथ प्रतिस्थापित किया जा सकता है (जैसा कि प्रोग्रामिंग में: पैरामीटर)।

एक स्मृति स्थान एक निम्न (एर) स्तर की अवधारणा है। एक मेमोरी लोकेशन का इस्तेमाल किसी वैल्यू को स्टोर करने के लिए किया जा सकता है, कभी-कभी किसी वैरिएबल की वैल्यू को स्टोर करने के लिए। हालाँकि, CPU चर कुछ चर (यों) के मूल्य को संग्रहीत करने का एक और तरीका है। सीपीयू रजिस्टर भी कम (एर) स्तर के भंडारण स्थान हैं, लेकिन वे मेमोरी स्थान नहीं हैं क्योंकि उनके पास पते नहीं हैं, बस नाम हैं।

कुछ अर्थों में, एक चर कार्यक्रम के इरादे को व्यक्त करने के लिए अमूर्तता का एक तंत्र है, जबकि एक स्मृति स्थान प्रसंस्करण वातावरण की एक भौतिक इकाई है जो भंडारण और पुनः प्राप्ति प्रदान करता है।

प्रश्न ००३: क्या यह सच है कि एक पॉइंटर मेमोरी लोकेशन ० एक्स २३४५२ के अंदर स्टोर किया जाता है? क्यूं कर?

हम निश्चित रूप से नहीं कह सकते। सिर्फ इसलिए कि वहाँ एक मूल्य है जो एक पते के रूप में काम करेगा, इसका मतलब यह नहीं है कि यह पता है, इसके बजाय पूर्णांक (दशमलव) 144466 हो सकता है। हम मूल्यों की व्याख्या पर अनुमान नहीं लगा सकते हैं कि वे संख्यात्मक रूप से कैसे दिखाई देते हैं।

प्रश्न ००४: क्या यह सच है कि एक पॉइंटर मेमोरी लोकेशन ० एक्स २३४५२ के अंदर स्टोर किया जाता है? क्यूं कर?

यह वास्तव में एक अजीब सवाल है। वे बक्से के आधार पर कुछ मान्यताओं की उम्मीद करते हैं, हालांकि, ध्यान दें कि पते प्रत्येक बॉक्स के लिए 1 से बढ़ जाते हैं। किसी भी आधुनिक कंप्यूटर में, इसका मतलब यह होगा कि प्रत्येक बॉक्स एक बाइट धारण कर सकता है - बाइट पता अब दशकों के लिए आदर्श है। हालाँकि एक बाइट केवल 8-बिट्स है और 0 से 255 (अहस्ताक्षरित मानों) तक हो सकता है; अभी तक वे इन पतों में से एक के भीतर संग्रहीत एक बड़ा मूल्य दिखाते हैं, इसलिए बहुत संदिग्ध है। (यह काम कर सकता है अगर यह एक शब्द संबोधित मशीन थी, लेकिन यह ऐसा नहीं कहता है, और, आज कुछ मशीनें हैं, हालांकि कुछ पेशेवर मशीनें हैं।)

आपके द्वारा दिखाए गए चार फ्लैशकार्ड के आधार पर, मैं कुछ अलग तरीके से पॉइंटर्स को परिभाषित करूंगा:

एक पॉइंटर एक मेमोरी लोकेशन होता है जिसका मान किसी दूसरे मैमोरी लोकेशन का मेमोरी एड्रेस होता है।

जबकि ऐसी परिस्थितियाँ हैं जहाँ यह सोच सही है, आप यहाँ रूपकों का मिश्रण कर रहे हैं। एक चर की धारणा एल्गोरिदम और उसके इरादे पर जाती है - यह मानने की कोई आवश्यकता नहीं है कि सभी चर में स्मृति स्थान होते हैं। कुछ चर (विशेष रूप से सरणियों) में स्मृति स्थान होते हैं क्योंकि स्मृति स्थान पते का समर्थन करते हैं (जबकि सीपीयू रजिस्टर को केवल अनुक्रमित नहीं नाम दिया जा सकता है)।

निष्पादन के लिए, चर और कथन और प्रोसेसर मेमोरी लोकेशन और प्रोसेसर निर्देश अनुक्रम के बीच एक तार्किक मानचित्रण है। एक वैरिएबल जिसका मान कभी नहीं बदलता (जैसे एक स्थिर) को आवश्यक रूप से मेमोरी लोकेशन की भी आवश्यकता नहीं होती है, क्योंकि वैल्यू को पुन: उत्पन्न किया जा सकता है (जैसे कि कंपाइलर द्वारा उत्पन्न कोड अनुक्रमों के लिए आवश्यक)।


4
और यहां तक ​​कि 8-बिट बाइट्स अभी भी सार्वभौमिक नहीं हैं।
डेडुप्लिकेटर

14
@JimmyJames forलूप इंडेक्स के मामले पर विचार करें जब कंपाइलर लूप को पूरी तरह से अनियंत्रित करने का फैसला करता है। उत्पादित आउटपुट कोड में कहीं भी (यह असेंबली या मशीन कोड या बाइट कोड हो) एक मेमोरी लोकेशन है जिसमें लूप काउंटर स्टोर हो जाता है। लेकिन यह अभी भी एक चर है।
dmckee

4
@JimmyJames, अनियंत्रित-लूप पॉइंटर के मामले में, फिर हाँ, यदि आपका कोड वास्तव में काउंटर के मूल्य का उपयोग करता है, तो उसे कहीं लोड किया जाना है , लेकिन (ए) वह स्थान एक रजिस्टर हो सकता है, और (बी) सिद्धांत में कोई कारण नहीं है कि अनियंत्रित लूप के हर पुनरावृत्ति पर एक ही स्थान क्यों होना चाहिए ।
सोलोमन स्लो

3
यदि लूप कुछ ऐसा कर रहा है, जो निश्चित लंबाई के सरणी sourceको समान लंबाई के सरणी में कॉपी कर रहा है, तो destलूप कोडित है for (int i=0; i<8; ++i) dest[i] = source[i];, dest++ = source++;जो कई बार के एपोसिट संख्या की पुनरावृत्ति के बराबर कुछ संकलन कर सकता है । लूप काउंटर के साथ ही साक्ष्य में कहीं नहीं है (रजिस्टर में भी नहीं), और केवल दोहराव की संख्या आपको लूप की स्थिति के बारे में बताती है।
dmckee

2
भेद सी की तरह भाषाओं द्वारा कुछ हद तक उलझन में है जिसका शब्दार्थ एक मशीन के अमूर्तन पर आधारित है, जिसकी स्मृति में कई संख्या वाले स्थान होते हैं।
माइकल काय

20

क्या यह कहना सुरक्षित है कि एक चर स्मृति स्थान के समान है?

नहीं। चर और स्मृति स्थान दो अलग-अलग अमूर्त स्तरों पर दो सार हैं। वैरिएबल और पॉइंटर्स कोड / भाषा स्तर पर उच्च स्तर की अवधारणा हैं, मशीन के स्तर पर मेमोरी लोकेशन एक निम्न स्तर की अवधारणा है। एक बार एक कोड एक निष्पादन योग्य में संकलित किया गया था, अब कोई चर नहीं है। इस तरीके से मेमोरी लोकेशन और वेरिएबल्स के बारे में बात करने की कोशिश करना एक स्पष्ट त्रुटि है।

एक चर को मेमोरी का उपयोग करके लागू किया जा सकता है, लेकिन हमेशा एक कंपाइलर एक गणना को अनुकूलित नहीं कर सकता है और पूरी तरह से रजिस्टरों में एक चर से संबंधित सभी गणना कर सकता है, या यह एक चर को कई स्मृति स्थानों पर रख सकता है, या यह एक एकल मेमोरी का उपयोग कर सकता है कई चर के लिए स्थान।

एक पॉइंटर एक मेमोरी लोकेशन होता है जिसका मान किसी दूसरे मैमोरी लोकेशन का मेमोरी एड्रेस होता है।

फ्लैशकार्ड की यह श्रृंखला इतनी उलझी हुई है, वे न सिर्फ सही हैं, बल्कि वे गलत भी नहीं हैं।


1
Once a code had been compiled into an executable, there's no longer any variables.यह एक ऐसी बात है जिससे मैं यकीनन असहमत हूं। यह सही है कि आपका वैरिएबल जैसा कि आप जानते हैं (अर्थात उस नाम से) अब मौजूद नहीं है, लेकिन आपका वाक्यांश यह बताता है कि संकलित निष्पादन योग्य केवल मेमोरी पतों का उपयोग करता है। यह सही नहीं है। आपके संकलित-पर-निष्पादित निष्पादन योग्य का कोई पता नहीं है कि यह निष्पादित करते समय कौन सी मेमोरी पते का उपयोग करेगा। एक चर की अवधारणा (अर्थात जो भी स्मृति पते को पुन: उपयोग करने के लिए एक पुन: प्रयोज्य संदर्भ दिया जाएगा) अभी भी संकलित निष्पादन योग्य के अंदर मौजूद है।
फ्लैटर

2
या संकलक चर को पूरी तरह से दूर कर सकता है, विभिन्न तरीकों से। पूर्व-कंप्यूटिंग कुछ, अनावश्यक चर pruning। यदि चर स्थिर है, तो कंपाइलर CPU निर्देशों का उपयोग करके समाप्त हो सकता है जो स्थिरांक का उपयोग करते हैं, और मैं तब तर्क देता हूं कि अब चर कहीं भी नहीं है।
कुत्स्कम

16

चर भाषा निर्माण हैं । उनका एक नाम है, एक दायरे में रहते हैं, कोड के अन्य भागों द्वारा संदर्भित किया जा सकता है, आदि वे एक तार्किक इकाई हैं। कंपाइलर इस भाषा के निर्माण को किसी भी तरह से लागू करने के लिए स्वतंत्र है, जब तक कि यह देखने योग्य व्यवहार है कि भाषा मानक द्वारा निर्धारित है। जैसे, चर को कहीं भी संग्रहीत करने की आवश्यकता नहीं है यदि कंपाइलर साबित कर सकता है कि इसकी आवश्यकता नहीं है।

मेमोरी स्थान एक हार्डवेयर अवधारणा है । वे आभासी / भौतिक स्मृति में एक स्थान का संकेत देते हैं। प्रत्येक मेमोरी लोकेशन में ठीक एक भौतिक पता और किसी भी वर्चुअल पते की मात्रा होती है जिसका उपयोग उसे हेरफेर करने के लिए किया जा सकता है। लेकिन प्रत्येक मेमोरी स्थान पर हमेशा एक बाइट संग्रहीत होता है।

संकेत एक विशेष प्रकार के मूल्य हैंकुछ कहना एक सूचक है, यह कहना कि कुछ प्रकार का है double। यह दर्शाता है कि मूल्य के लिए कितने बिट्स का उपयोग किया जाता है, और उन बिट्स की व्याख्या कैसे की जाती है, लेकिन इसका मतलब यह नहीं है कि यह मान एक चर में संग्रहीत है, और न ही इसका मतलब है कि यह मान मेमोरी में संग्रहीत है।


C में एक उदाहरण देने के लिए: जब मेरे पास एक 2D सरणी है int foo[6][7];और मैं इसके साथ एक तत्व का उपयोग करता हूं foo[1][2], तो fooएक चर है जो एक सरणी रखता है। जब fooइस संदर्भ में उपयोग किया जाता है, तो यह एक सूचक में सरणी के पहले तत्व में बदल जाता है। यह पॉइंटर किसी भी वैरिएबल में संग्रहित नहीं है, न ही इसे मेमोरी में स्टोर किया गया है, यह केवल सीपीयू के रजिस्टर के भीतर ही वैल्यू जनरेट होता है, उपयोग किया जाता है और फिर भूल जाता है। इसी तरह, अभिव्यक्ति foo[1]को इस संदर्भ में एक और सूचक में बदल दिया जाता है, जो फिर से, एक चर में नहीं है, स्मृति में संग्रहीत नहीं है, लेकिन सीपीयू में गणना की जाती है, उपयोग किया जाता है, और भुला दिया जाता है। तीन अवधारणाओं चर , स्मृति स्थान और सूचक वास्तव में तीन अलग अवधारणाएं हैं।


Btw, मेरा वास्तव में मतलब था "प्रत्येक मेमोरी स्थान पर हमेशा एक बाइट संग्रहीत होता है"। लगभग पचास साल पहले की गणना के पत्थर की उम्र में यह मामला नहीं था, लेकिन यह आज के सभी हार्डवेयर के लिए सच है। जब भी आप एक बाइट से बड़ी मेमोरी में कोई स्टोर करते हैं, तो आप वास्तव में लगातार कई मेमोरी लोकेशन का उपयोग कर रहे हैं। Ie (बड़े एंडियन बाइट ऑर्डर को मानते हुए) संख्या 0x01234567 मेमोरी के रूप में संग्रहीत की जाती है

+------+------+------+------+
| 0x01 | 0x23 | 0x45 | 0x67 |
+------+------+------+------+
    ^      ^      ^      ^
    |      |      |      |
 0x4242 0x4243 0x4244 0x4245

(X86 आर्किटेक्चर जैसी छोटी एंडियन मशीनें बाइट्स को उल्टे क्रम में स्टोर करती हैं।) यह बात पॉइंटर्स के लिए भी सही है: 64 बिट मशीन पर एक पॉइंटर को लगातार आठ बाइट्स में स्टोर किया जाता है, प्रत्येक का अपना मेमोरी एड्रेस होता है। आप मेमोरी सेल को नहीं देख सकते हैं और कह सकते हैं: "ओह, यह एक पॉइंटर है!" आप हमेशा बाइट्स तभी देखते हैं जब आप मेमोरी देखते हैं


कंप्यूटर को कैसे पता चलता है जब लगातार मेमोरी स्थानों का एक समूह शुरू होता है और समाप्त होता है?
प्रोजनर

6
@progner यह नहीं है। यह उन निर्देशों के अनुसार मेमोरी में बाइट्स की व्याख्या करता है। उन निर्देशों को भी कुछ नहीं बल्कि खुद बाइट्स के एक क्रम में संग्रहीत किया जाता है। सीपीयू को एक बाइट के बीच एकमात्र अंतर जो एक निर्देश रखता है, एक बाइट जो एक चरित्र रखता है, और एक बाइट जो कुछ फ्लोटिंग पॉइंट बिट्स रखता है, यह है कि इस बाइट का उपयोग करने का निर्देश कैसे दिया गया था। यदि बाइट प्राप्त की जाती है क्योंकि प्रोग्राम काउंटर इसे इंगित करता है, तो इसका उपयोग एक निर्देश के रूप में किया जाता है। यदि इसे लाया जाता है क्योंकि एक निर्देश इसे फ्लोट रजिस्टर में लोड करने के लिए कहता है, तो इसका उपयोग फ्लोटिंग पॉइंट डेटा के रूप में किया जाता है।
सेमीस्टर

7
@progner यह वास्तव में वॉन-न्यूमन आर्किटेक्चर का प्रमुख नवाचार था: निर्देशों और डेटा को एक ही मेमोरी में संग्रहीत करने के लिए, डेटा को बदलने के लिए निर्देशों को अनुमति देता है जिसे बाद में अधिक निर्देशों के रूप में निष्पादित किया जाता है। इसने स्वयं को संशोधित करने वाले कोड की अनुमति दी, लेकिन यह सिस्टम के कर्नेल को कुछ प्रोग्राम को मेमोरी में लोड करने की अनुमति देता है, और फिर सीपीयू को उस प्रोग्राम को निष्पादित करने के लिए कहता है। वॉन-न्यूमन से पहले, ज़्यूस मशीनों जैसे कंप्यूटरों को एक चैनल के माध्यम से अपने निर्देश प्राप्त होंगे जो उनके द्वारा संचालित डेटा से पूरी तरह से स्वतंत्र थे।
सेमीस्टर

5

मुझे अपने वास्तविक प्रश्न पर ध्यान दें - "कौन सही है?" इन दो कथनों की तुलना करते समय:

  • पॉइंटर एक वैरिएबल होता है जिसका मान दूसरे वेरिएबल का मेमोरी एड्रेस होता है
  • एक पॉइंटर एक मेमोरी लोकेशन होता है जिसका मान किसी दूसरे मैमोरी लोकेशन का मेमोरी एड्रेस होता है।

इसका उत्तर कोई नहीं है । पहले "एक दूसरे चर के मेमोरी एड्रेस" की बात करता है, लेकिन चर में जरूरी नहीं कि मेमोरी एड्रेस हो, जैसा कि अन्य उत्तर पहले ही समझा चुके हैं। दूसरा कहता है "एक पॉइंटर एक मेमोरी लोकेशन है", लेकिन एक पॉइंटर का शाब्दिक अर्थ सिर्फ एक संख्या है, जिसे एक वेरिएबल में स्टोर किया जा सकता है, लेकिन पहले की तरह, एक वेरिएबल में मेमोरी एड्रेस होना जरूरी नहीं है।

अधिक सटीक बयानों के लिए कुछ उदाहरण:

  • "एक सूचक एक मेमोरी स्थान के मेमोरी एड्रेस का प्रतिनिधित्व करने वाला एक नंबर है", या

  • "एक पॉइंटर वैरिएबल एक वैरिएबल है जिसका मान मेमोरी लोकेशन का मेमोरी एड्रेस है।"

  • "एक मेमोरी एड्रेस एक पॉइंटर को मेमोरी लोकेशन के मेमोरी एड्रेस का प्रतिनिधित्व कर सकता है।"

ध्यान दें कभी-कभी "पॉइंटर" शब्द का उपयोग "पॉइंटर वैरिएबल" के लिए एक शॉर्टकट के रूप में किया जाता है, जो तब तक ठीक है जब तक कि यह भ्रम की स्थिति पैदा न करे।


आप "अन्य" को "ए" में बदल सकते हैं क्योंकि एक संकेतक खुद को इंगित कर सकता है।
पीटर बी

@PieterB: nitty, nitty ;-) सुनिश्चित नहीं हैं कि क्या यह वास्तव में इसे स्पष्ट करता है, क्योंकि मैं केवल मूल शब्द को डिग्री में बदलना चाहता था ताकि वास्तव में उन्हें समझदार बनाया जा सके। लेकिन अफसोस, मैंने संपादन किया।
डॉक्टर ब्राउन

निष्पक्ष होने के लिए, यदि आपको वह नाइटपिकी मिलती है "लेकिन एक पॉइंटर का शाब्दिक अर्थ सिर्फ एक नंबर है" या तो सही नहीं है, वास्तव में एक पॉइंटर एक पहचानकर्ता है जो एक नंबर की पुष्टि करता है;) या कम से कम हमें इन पर प्राप्त करने के लिए भाषा की बारीकियों को जानना होगा; विवरण।
ज़ैबिस

2
पॉइंटर एक मान है (संख्या कुछ कार्यान्वयन के लिए पहले से ही विशिष्ट है) संभावित रूप से किसी वस्तु का जिक्र है। संभावित रूप से वहाँ भी अशक्त संकेत, जंगली संकेत, और झूलने बिंदु हैं, हालांकि उनमें से कुछ (या सभी!) का इस्तेमाल की गई भाषा से इंकार किया जा सकता है।
डेडुप्लिकेटर

2
@ डेडप्लिकेटर: आप सही हैं, लेकिन मुझे लगता है कि एक संख्या के रूप में एक पॉइंटर का मानसिक मॉडल इस प्रश्न के उद्देश्य के लिए पर्याप्त है। तो आइये रखते हैं चीजों को सरल।
डॉक्टर ब्राउन

5

मैं निश्चित रूप से यह नहीं कहूंगा कि एक सूचक एक स्मृति स्थान है जिसमें एक पता होता है। एक के लिए, मैं एक आर्किटेक्चर के बारे में नहीं जानता जहाँ 0x23453एक बाइट में फिट हो सकता था। :) भले ही आप बाइट / शब्द भेद को दूर कर दें, फिर भी आपको समस्या है कि हर मेमोरी लोकेशन में एक पता होता है। पते सिर्फ संख्याएं हैं, और स्मृति की सामग्री सिर्फ संख्याएं हैं।

मुझे लगता है कि यहाँ चाल यह है कि "सूचक" मानव इरादे का वर्णन करता है , न कि वास्तुकला की कोई विशेष विशेषता। यह एक "चरित्र" या "स्ट्रिंग" के समान है, यह एक ठोस चीज नहीं है जिसे आप स्मृति में देख सकते हैं - वे सभी केवल संख्याएं हैं, लेकिन वे तार के रूप में कार्य करते हैं, क्योंकि उनका इलाज कैसे किया जाता है। "पॉइंटर" का अर्थ केवल एक मान है जिसका उपयोग एक पते के रूप में किया जाना है।

ईमानदारी से, यदि आपका लक्ष्य किसी विशेष भाषा (ऑब्जेक्टिव सी?) को पढ़ाना है , तो मुझे यकीन नहीं है कि क्लासिक मेमोरी टेप को ड्राइंग करना उपयोगी है। आप पहले से ही सफेद झूठ बोल रहे हैं और एक बाइट के लिए टाइप किए गए मान दिखा रहे हैं। सिमेंटिक्स सिखाएं, यांत्रिकी नहीं - बिंदुओं के बारे में महत्वपूर्ण अंतर्दृष्टि यह है कि वे अप्रत्यक्ष रूप से प्रदान करते हैं , जो समझने के लिए एक व्यापक उपयोगी उपकरण है।

मुझे लगता है कि एक अच्छी तुलना एक यूआरएल के लिए हो सकती है, जो आपको बताता है कि कुछ डेटा कहां मिल सकता है, लेकिन डेटा ही नहीं है। मेरी बात सुनो:

  • आपको शायद ही परवाह हो कि URL वास्तव में क्या है ; उनमें से अधिकांश के नाम के साथ लिंक में दूर squirrelled हैं। बहुत से लोग इंटरनेट का उपयोग बिना यह जानने के करते हैं कि किसी पृष्ठ में URL का परिणाम क्या है; कुछ लोग पूरी तरह से URL से बेखबर हैं।

  • प्रत्येक स्ट्रिंग एक URL नहीं है, या URL के रूप में उपयोग करने का इरादा है।

  • यदि आप किसी फर्जी URL, या ऐसे पृष्ठ पर जाने की कोशिश करते हैं जो मौजूद था, लेकिन तब से हटा दिया गया है, तो आपको एक त्रुटि मिलती है।

  • एक URL एक छवि, कुछ पाठ, कुछ संगीत, या किसी भी अन्य व्यक्तिगत मदों की संख्या को इंगित कर सकता है - या यह एक पृष्ठ पर कई प्रकार की चीजों के साथ इंगित कर सकता है। समान लेआउट वाले लेकिन अलग-अलग डेटा वाले पृष्ठों का एक पूरा समूह होना बहुत आम है।

  • यदि आप एक वेब पेज बनाते हैं, और आप किसी अन्य वेब पेज पर डेटा को संदर्भित करना चाहते हैं, तो आपको यह सब कॉपी और पेस्ट करने की आवश्यकता नहीं है; आप बस इसके लिए एक लिंक बना सकते हैं।

  • किसी भी अन्य पेज की संख्या एक ही URL से लिंक हो सकती है।

  • यदि आपके पास समान पृष्ठों का संग्रह है, तो आप एक इंडेक्स पेज बना सकते हैं जो उन सभी के लिंक को सूचीबद्ध करता है, या आपके पास पृष्ठ 1 के निचले भाग में "अगला" लिंक हो सकता है जो आपको पेज 2 पर ले जाता है, और इसी तरह। दोनों दृष्टिकोणों के फायदे और नुकसान तुरंत स्पष्ट हैं, खासकर यदि आप विचार करते हैं कि विभिन्न स्थानों पर पृष्ठों को जोड़ने या हटाने के लिए वेबमास्टर को क्या करना होगा।

यह सादृश्य यह स्पष्ट करता है कि पॉइंटर्स किस लिए हैं , जो उन्हें समझने के लिए महत्वपूर्ण है - अन्यथा वे सिर्फ मनमाने, जटिल और व्यर्थ लगते हैं। यह समझना कि कुछ काम करना कितना आसान है यदि आप पहले से ही यह समझते हैं कि यह क्या करता है और यह क्यों उपयोगी है। यदि आपने पहले ही पता लगा लिया है कि एक पॉइंटर कुछ ब्लैक बॉक्स है जो आपको बताता है कि कुछ और कहाँ है, और फिर आप मेमोरी मॉडल की पेचीदगियों के बारे में सीखते हैं, तो पतों के रूप में पॉइंटर्स का प्रतिनिधित्व करना काफी स्पष्ट है। साथ ही, शब्दार्थ पढ़ाने से आपके छात्रों को अन्य प्रकार के अप्रत्यक्ष रूप को समझने और आविष्कार करने के लिए बहुत बेहतर जगह मिल जाएगी - जो तब अच्छा होता है जब अधिकांश प्रमुख भाषाओं में संकेत नहीं होते हैं!


every memory location contains an address- हर मेमोरी लोकेशन का एक पता होता है। यह कहीं भी निहित नहीं है, सिवाय एक सूचक चर में।
रॉबर्ट हार्वे

@RobertHarvey प्रत्येक मेमोरी लोकेशन (शब्द, कम से कम) में एक संख्या होती है, जिसे एक पते के रूप में तुच्छ रूप से व्याख्या किया जा सकता है । मुद्दा यह था कि हार्डवेयर में कुछ भी वास्तव में गैर-पते से पते को अलग नहीं करता है
ईवे

2

मुझे पता है कि आप पहले से ही एक उत्तर को स्वीकार कर चुके हैं, और इस प्रश्न के पांच उत्तर पहले से ही हैं, लेकिन एक बिंदु है जिसका वे उल्लेख नहीं करते हैं, एक यह है कि मुझे लगता है कि आपने इसे उलझा दिया है। सीएस पाठ्यपुस्तक अक्सर प्रोग्रामिंग भाषा की पसंद के बारे में अज्ञेयवादी होने की कोशिश करते हैं, जिससे यह अनुमान लगाया जाता है कि चीजों का वर्णन करने के लिए इस्तेमाल की जाने वाली शब्दावली सार्वभौमिक है। यह नहीं है।

सी में, अपर एम्परसेंड ऑपरेटर को "पता-इन" ऑपरेटर कहा जाता है। सी प्रोग्रामर यह कहने में संकोच नहीं करेंगे कि अभिव्यक्ति &xचर x के पते का मूल्यांकन करती है। बेशक उनका मतलब है "स्मृति पता जिसमें चर x का मान संग्रहीत है" लेकिन कोई भी आकस्मिक बातचीत में पांडित्य नहीं है। सी शब्द में "पॉइंटर" आमतौर पर एक वैरिएबल के डेटा प्रकार को संदर्भित करता है, जिसका उद्देश्य एक मेमोरी एड्रेस है, जिसका मूल्य है। या समतुल्य रूप से डेटा प्रकार का मान। लेकिन कुछ लोग मूल्य के रूप में "पॉइंटर" का उपयोग करेंगे।

जावा में, ऑब्जेक्ट या सरणी प्रकार के सभी चर सी पॉइंटर्स (पॉइंटर अंकगणित को छोड़कर) की तरह बहुत व्यवहार करते हैं, लेकिन जावा प्रोग्रामर उन्हें संदर्भ कहते हैं, न कि पॉइंटर्स।

C ++ संदर्भ और संकेत को अलग-अलग अवधारणा मानता है। वे संबंधित हैं, लेकिन बहुत समान नहीं हैं, इसलिए C ++ प्रोग्रामर को बातचीत में अंतर करना पड़ता है। एम्परसेंड को कुछ संदर्भों में "पता-का" और दूसरों में "संदर्भ-से" के रूप में पढ़ा जाता है।

पॉइंटर एक वैरिएबल होता है जिसका मान दूसरे वेरिएबल का मेमोरी एड्रेस होता है।

यह है कि कैसे एक सी प्रोग्रामर "एक इंट" के समान अर्थ में "पॉइंटर" का उपयोग करके इसका वर्णन कर सकता है। (जैसा कि, "एक सूचक एक मेमोरी एड्रेस रखता है, जबकि एक इंट एक निश्चित सीमा के भीतर पूर्णांक रखता है।")

एक पॉइंटर एक मेमोरी लोकेशन होता है जिसका मान किसी दूसरे मैमोरी लोकेशन का मेमोरी एड्रेस होता है।

यह कहने का एक अजीब तरीका है, क्योंकि इसके लिए "बहुत ही ढीली और अनौपचारिक परिभाषा है।"

क्या यह कहना सुरक्षित है कि एक चर स्मृति स्थान के समान है?

यह कहना स्पष्ट होगा कि मेमोरी एड्रेस मेमोरी में वह स्थान है जहां एक चर का मान संग्रहीत किया जाता है। (संकलित, संकलक अनुकूलन के कारण, सभी चर स्मृति में संग्रहीत नहीं किए जाते हैं, लेकिन कोई भी चर जिसका पता लिया &xजाएगा।)


जैसा कि हम पांडित्यपूर्ण हो रहे हैं: वह पता जिस पर कुछ संग्रहीत है। एक पते के अलावा कुछ भी स्टोर करने में सक्षम नहीं होने के कारण, अक्सर चीजें कई आसन्न स्थानों में संग्रहीत की जाती हैं, जिनमें से केवल एक (आमतौर पर कुछ हद तक नियम द्वारा चयनित) को संबोधित किया जाता है (और केवल एक संभावित कई पते का उपयोग करके)।
डेडुप्लिकेटर

@Deduplicator एक के लिए मैं पांडित्य होने की कोशिश नहीं कर रहा हूं।
gatkin

C मानक भी अलग-अलग होता है, औपचारिक रूप से, चर के बीच जो हर "अनुक्रम बिंदु" पर अमूर्त मशीन के चरणों का कड़ाई से पालन करना चाहिए — स्मृति सुरक्षा के लिए थ्रेड सुरक्षा और कुछ निम्न-स्तरीय ऑपरेशनों के लिए - और वे जो डॉन नहीं करते हैं ' टी, जो एक रजिस्टर में स्थानांतरित करने या पूरी तरह से अनुकूलित करने के लिए स्वतंत्र हैं।
डेविस्लर

@Davislor: C मानक उन स्थानों में "ऑब्जेक्ट" शब्द का उपयोग करता है जहां अन्य भाषा विनिर्देश "वैरिएबल" का उपयोग करते हैं, साथ ही साथ अन्य चीजों का वर्णन करने के लिए जो चर नहीं हैं। कुछ चर्चाएँ भाषा-अज्ञेय शब्द "चर" का उपयोग कर सकती हैं, लेकिन जिस किसी भी कारण से मानक के पास नामांकित आवंटन (चर / संघ सदस्य) या अनाम वस्तुओं की तरह अन्य वस्तुओं से नामित असंबद्ध आवंटन (चर) के बीच अंतर करने के लिए एक शब्द का अभाव है। dereferencing पॉइंटर्स द्वारा। अनौपचारिक रूप से, "चर" एक महान शब्द है, लेकिन मानक इसका उपयोग नहीं करता है।
सुपरकैट

@ सुपरकैट सही नहीं है। C11 मानक "चर" शब्द का सौ बार से अधिक उपयोग करता है, जिनमें से कई दर्जन संज्ञाएं हैं, उदाहरण के लिए, "चर के लिए
समकालिक अभिगम

1

कथन A पॉइंटर एक वैरिएबल है जिसका मान किसी अन्य वैरिएबल का मेमोरी एड्रेस ओवरसाइम्प्लीफाइड है। लेकिन जब तक एक पाठक यह समझता है कि वास्तव में एक मेमोरी स्थान क्या है, और यह एक चर से कैसे भिन्न होता है, तो वे पहले से ही समझ जाएंगे कि वास्तव में एक सूचक क्या है और इसलिए अब इस गलत व्याख्या पर भरोसा करने की आवश्यकता नहीं है।

कथन A पॉइंटर एक मेमोरी स्थान है जिसका मान किसी अन्य मेमोरी लोकेशन का मेमोरी एड्रेस गलत है। एक पॉइंटर के मान को मेमोरी लोकेशन में स्टोर करने की आवश्यकता नहीं होती है, और अगर किसी पॉइंटर को "मेमोरी" की इच्छित परिभाषा के आधार पर, किसी पॉइंटर को किसी मेमोरी लोकेशन पर इंगित करने की आवश्यकता होती है, तो यह बहस का विषय है।

एक चर और एक स्मृति स्थान के बीच अंतर क्या है

एक मेमोरी लोकेशन कई संभावित जगहों में से एक है, जहाँ डेटा को स्टोर किया जा सकता है। वह डेटा एक वैरिएबल या एक वैरिएबल का हिस्सा हो सकता है। चर डेटा लेबल करने का एक तरीका है।


0

यह उत्तर C और C ++ पर केंद्रित है; यह उचित लगता है क्योंकि आपका प्रश्न उन बिंदुओं से संबंधित है जो अन्य भाषाओं की तुलना में C / C ++ का अधिक अभिन्न अंग हैं। इस पोस्ट के अधिकांश भाग बिना संकलित रन समय (पास्कल या एडा की तरह, लेकिन जावा या सी # की तरह नहीं) के बिना अधिकांश संकलित भाषाओं पर लागू होंगे।

पहले से दिए गए अच्छे उत्तर इस बात पर जोर देते हैं कि एक चर भौतिक स्मृति की तुलना में अधिक सार स्तर पर एक भाषा का निर्माण है। मैं इस बात पर जोर देना चाहूंगा कि इस अमूर्त में एक निश्चित तर्क और प्रणाली है:

अमूर्त मुख्य रूप से शाब्दिक पते के बजाय एक नाम का उपयोग करते हैं।

सिद्धांत विचार यह है कि एक चर एक टाइप की गई वस्तु के लिए एक नामित संभाल है; C / C ++ में ऑब्जेक्ट्स आमतौर पर मेमोरी में होते हैं । इसके बाद भाषाएं आजीवन प्रबंधन और डेटा रूपांतरण से संबंधित कुछ बारीकियों को जोड़ देती हैं। चरों की अवधारणा भौतिक पतों की तुलना में अधिक सार है क्योंकि हम वास्तव में पतों के संख्यात्मक मूल्य या स्मृति में कार्यों के सटीक स्थान के बारे में परवाह नहीं करते हैं। हम बस उन्हें नाम देते हैं और बाद में उन्हें नाम से संबोधित करते हैं, और संकलक, लिंकर और रनटाइम सिस्टम ग्रिटि विवरण का ध्यान रखते हैं।

और यह ढोंग न करें कि C / C ++ मेमोरी अज्ञेयवादी है: आखिरकार, सार्वभौमिक रूप से लागू पता ऑपरेटर है। हां, सच है, आप रजिस्टर स्टोरेज क्लास में सी वेरिएबल का पता नहीं लगा सकते हैं; लेकिन आपने आखिरी बार कब इस्तेमाल किया है? यह सामान्य अवधारणा का एक विशेष अपवाद है, न कि तर्क का एक थोक खारिज। सामान्य नियम, इसके विपरीत, कि एक चर का पता लेना वास्तव में संकलक को वास्तव में स्मृति में एक वस्तु बनाने के लिए मजबूर करता है, भले ही वह ऐसा अन्यथा न करे (जैसे स्थिरांक के साथ)। "नामित हैंडल" अवधारणा सी ++ संदर्भों के लिए एक अच्छा प्रतिमान भी है: एक संदर्भ उसी वस्तु के लिए सिर्फ एक और नाम है

जब मैंने 68k के लिए इनलाइन असेंबलर लिखा, तो यह देखना अच्छा था कि आप रजिस्टरों को संबोधित करने के लिए ऑफ़सेट के रूप में चर नामों का उपयोग कैसे कर सकते हैं (और आप registerनंगे धातु रजिस्टर नामों के बजाय घोषित चर के नामों का उपयोग कर सकते हैं !)। संकलक के लिए, एक चर एक निरंतर पता ऑफसेट है। पुनरावृत्ति करने के लिए: चर को हैंडल कहा जाता है, आमतौर पर स्मृति में वस्तुओं के लिए।


पॉइंटर्स C #, Java, JS और अन्य भाषाओं का एक बहुत ही बुनियादी हिस्सा हैं। उन्हें अलग तरह से कॉल करने से वह बदल नहीं जाता है, हालांकि यह अच्छा है पीआर।
Deduplicator

@Deduplicator :-) अच्छा ol 'टोनी ...
पीटर -

0

ऐसा लगता है कि यह प्रश्न एक लोकप्रिय भाषा के उद्देश्य से है, जो C मानक को अतिरिक्त गारंटी के साथ बनाया गया है "ऐसे मामलों में जहां मानक के कुछ भाग या कार्यान्वयन के दस्तावेज कुछ कार्रवाई के व्यवहार का वर्णन करते हैं, और कुछ अन्य भाग इसे अपरिभाषित मानते हैं , पूर्व भाग हावी है। ", साथ ही साथ" चर "की परिभाषा अन्य भाषाओं के शब्द के उपयोग के अनुरूप है।"

उस भाषा में, प्रत्येक मेमोरी स्थान को एक गिने हुए मेलबॉक्स के रूप में देखा जा सकता है जो हमेशा बिट्स की कुछ संख्या (आमतौर पर आठ) रखता है, जिनमें से प्रत्येक स्वतंत्र रूप से शून्य या एक हो सकता है। मेमोरी स्थान आमतौर पर दो, चार या आठ की पंक्तियों में व्यवस्थित होते हैं। और कुछ ऑपरेशन एक साथ कई लगातार मेमोरी स्थानों पर प्रक्रिया करते हैं। मशीन के आधार पर, कुछ ऑपरेशन जो दो, चार, या आठ मेमोरी स्थानों के समूहों पर काम करते हैं, वे एक ही पंक्ति में स्थानों पर परिचालन तक सीमित हो सकते हैं। आगे, जबकि कुछ मशीनों में लगातार गिने जाने वाले मेलबॉक्सों का एक कमरा हो सकता है, दूसरों के पास गिने हुए मेलबॉक्सों के कई अलग समूह हो सकते हैं।

एक चर कई मेमोरी स्थानों की पहचान करता है जो इसके साथ विशेष रूप से जुड़े होते हैं, और एक प्रकार जिससे उन मेमोरी स्थानों की व्याख्या की जानी चाहिए। एक चर को पढ़ने से संबंधित भंडारण स्थानों के भीतर बिट्स का कारण चर के प्रकार के लिए उपयुक्त तरीके से व्याख्या किया जाएगा, और एक चर लिखने से संबद्ध बिट्स को इसके प्रकार और मूल्य के लिए उपयुक्त तरीके से सेट किया जाएगा।

मेलबॉक्स को पहचानने के लिए जो भी जानकारी आवश्यक है, उसका पता संलग्न करता है। इसे एक साधारण संख्या के रूप में संग्रहीत किया जा सकता है, या उस समूह के भीतर मेलबॉक्स की संख्या के साथ-साथ किसी प्रकार के समूह डिज़ाइनर के रूप में संग्रहीत किया जा सकता है।

&ऑपरेटर को एक चर पर लागू करने से एक सूचक प्राप्त होगा जो पते को संलग्न करता है और उसके प्रकार को टाइप करता है। एक सूचक पर संचालक *या []ऑपरेटर को लागू करने से मेलबॉक्सों की बिट्स विस्थापित पते पर शुरू हो जाएंगी और व्याख्या किए गए प्रकार के लिए उपयुक्त तरीके से सेट की जा सकती हैं।


ऐसा लगता है जैसे आप प्रश्न को पलट रहे हैं।
रॉबर्ट हार्वे

0

मैं इस पार्टी में देर से आ रहा हूं लेकिन मैं अपने 2 सेंट लगाने का विरोध नहीं कर सकता।

इन समयों पर, इन मेमोरी स्थानों में संग्रहीत मूल्यों में क्या अंतर है?

समय १

यहाँ छवि विवरण दर्ज करें

समय २

यहाँ छवि विवरण दर्ज करें

सही उत्तर: कुछ नहीं। वे सभी समान मूल्य हैं जो उनके अर्थ की विभिन्न व्याख्याओं के साथ प्रस्तुत किए जा रहे हैं।

मुझे इस बात की जानकारी कैसे होगी? क्योंकि मैं वह हूं जिसने इसे बनाया है। तुम सच में नहीं जानते कि अभी तक।

आप किसी ऐसी चीज से भाग रहे हैं जिसे मैं बैंड समस्या कहता हूं । इन मूल्यों के अर्थ को सही ढंग से कैसे समझा जाए, यहां संग्रहीत नहीं है। वह ज्ञान कहीं और संग्रहीत है। फिर भी जब आप इन मूल्यों को कागज पर प्रस्तुत करते हैं तो आप उस व्याख्या में डालते हैं। इसका मतलब है कि आपने ऐसी जानकारी जोड़ी है जो इन मेमोरी स्थानों में मौजूद नहीं है।

उदाहरण के लिए, यहां मूल्य समान हैं, लेकिन आप केवल यह जानते हैं कि अगर आप ASCII / UTF-8 वर्ण एन्कोडिंग मान लेते हैं तो आप सही हैं , तो EBCDIC के बजाय मुझे पहली बार कैसे मिला । और आपको यह भी मानना ​​होगा कि दूसरा उन स्मृति स्थानों पर संग्रहीत संख्यात्मक मानों का हेक्साडेसिमल भाव है, जो सभी को दूसरे पते के संकेत दे सकते हैं, बजाय इसके कि स्ट्रिंग के संदर्भ में कहा जाए कि सभी "0x" से शुरू होते हैं। : पी

इन मेमोरी स्थानों में संग्रहित कुछ भी नहीं आपको बताता है कि उनमें से कोई भी धारणा सही है। वह जानकारी संग्रहीत की जा सकती है। लेकिन इसे कहीं और संग्रहीत किया जाएगा।

यह प्रस्तुति समस्या है । आप इसे प्रस्तुत करने के बारे में पहले सहमत हुए बिना किसी भी संख्या को बिल्कुल भी व्यक्त नहीं कर सकते। आप मान्यताओं, सम्मेलनों और संदर्भों पर झुक सकते हैं लेकिन यदि आप इसे गहराई से खरोंचते हैं, जब प्रस्तुति स्पष्ट रूप से परिभाषित नहीं होती है, तो केवल सही उत्तर "पर्याप्त जानकारी नहीं" है।


यह और भी मजेदार है जब एक ही मेमोरी का उपयोग एक ही समय में विभिन्न स्थिर चीजों के लिए किया जाता है।
डेडुप्लिकेटर

@ डीडुलेटर सच। वह हमेशा मुझे c ++ की पुनर्व्याख्या कास्ट के बारे में सोचता है । एक ही बिट्स एक अलग तरह से देखा।
कैंडिड_ऑरेंज

@ डेडप्लिकेटर या, इसके बारे में सोचने के लिए, c
candied_orange
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.