सी # में, एक संरचना (या कक्षा) घोषित करना संभव है जिसमें पॉइंटर प्रकार का सदस्य है, जैसे:सी #: सूचक प्रकार के रूप में सूचक प्रकार का उपयोग?
unsafe struct Node
{
public Node* NextNode;
}
क्या यह कभी सुरक्षित है (गलती .. एक पल के लिए अनदेखा करें जो विडंबनात्मक छोटा unsafe
ध्वज ..) इस निर्माण का उपयोग करने के लिए? मेरा मतलब ढेर पर लंबे समय तक भंडारण के लिए है। जो मैं समझता हूं, जीसी चीजों को चारों ओर स्थानांतरित करने के लिए स्वतंत्र है, और जब यह स्थानांतरित किए गए किसी भी संदर्भ के संदर्भ को अपडेट करता है, तो क्या यह पॉइंटर्स भी अपडेट करता है? मैं अनुमान लगा रहा हूं, जो इस निर्माण को बहुत असुरक्षित बना देगा, है ना?
मुझे यकीन है कि ऐसा करने के लिए बेहतर विकल्प हैं, लेकिन इसे morbid जिज्ञासा कहते हैं।
संपादित करें: कुछ भ्रम प्रतीत होता है। मुझे पता है कि यह एक महान निर्माण नहीं है, मैं पूरी तरह से जानना चाहता हूं कि यह हमेशा एक सुरक्षित निर्माण है, यानी: क्या पॉइंटर को जो भी आपने मूल रूप से इंगित किया है उसे इंगित करने की गारंटी दी है?
मूल सी-कोड का उपयोग बिना किसी पेड़ (गहराई पहले) को घुमाने के लिए किया जाता था, जहां पेड़ को सरणी में संग्रहीत किया जाता है। तब सरणी को पॉइंटर बढ़ाने से गुजरता है, जब तक कोई निश्चित स्थिति पूरी नहीं हो जाती है, तो पॉइंटर को नेक्स्ट नोड पर सेट किया जाता है, जहां ट्रैवर्सल जारी रहता है। बेशक, सी # में पूरा किया जा सकता है:
struct Node
{
public int NextNode;
... // other fields
}
जहां int
अगले नोड की सरणी में अनुक्रमणिका है। लेकिन प्रदर्शन कारणों से, मैं सीमाओं से बचने के लिए पॉइंटर्स और fixed
सरणी के साथ झुकाव समाप्त कर दूंगा, और मूल सी-कोड अधिक प्राकृतिक लग रहा था।
जीसी स्मृति के उन क्षेत्रों को स्थानांतरित नहीं करता है जो निश्चित कीवर्ड का उपयोग करके स्मृति स्थान पर पिन किए गए हैं। ** morbid जिज्ञासा के लिए –
+1 ** –
आप इसे पहले स्थान पर क्यों करना चाहते हैं? –