2010-06-17 10 views
11

को प्रभावित करता है शायद यह एक कठिन सवाल नहीं है, लेकिन मैं स्ट्रिंग प्रकार को विज़ुअल सी ++ में तर्क के रूप में कैसे इलाज करता हूं, इस पर थोड़ा उलझन में हूं। मैं कार्यों के लिए निम्न है:सी ++/सीएलआई में संदर्भ द्वारा एक तर्क पारित करें, इसलिए पुनः असाइनमेंट कॉलर

void function_1(String ^str_1) 
{ 
    str_1 = gcnew String("Test"); 
} 

void function_2() 
{ 
    String ^str_2 = nullptr; 
    function_1(str_2); 
} 

function_1 कॉल करने के बाद, str_2 अभी भी null के बराबर है, लेकिन मैं क्या हासिल करना चाहते हैं कि str_2Test के बराबर है। तो, मैं कैसे प्राप्त कर सकता हूं कि str_1 की सामग्री को function_2 पर भेज दिया गया है?

किसी भी सलाह के लिए धन्यवाद।

उत्तर

24

का प्रयोग करें एक tracking reference:

void function_1(String ^%str_1) 
{ 
    str_1 = gcnew String("Test"); 
} 

स्पष्टीकरण: पासिंग String ^ एक सूचक गुजर की तरह है। परिवर्तन केवल संदर्भ की स्थानीय प्रतिलिपि में किए जाते हैं। String ^% किसी संदर्भ के संदर्भ को पारित करने जैसा है ... जैसे कि आप एक पॉइंटर को पॉइंटर पास करते हैं जब एक फ़ंक्शन को कॉल करते हैं जो मूल पॉइंटर को बदलना चाहिए।

+0

धन्यवाद! आज कुछ सीख लिया! – stefangachter

+0

@Agnel मुझे नहीं पता कि आपने क्यों कहा था कि जब आप एक पॉइंटर पास करते हैं तो संदर्भ की केवल स्थानीय प्रतियां बदल दी जाती हैं। सबसे पहले एक सूचक एक संदर्भ नहीं है। दूसरा, यदि आप सी ++ में पॉइंटर पास करते हैं और डेटा को संशोधित करते हैं, तो आप डेटा की स्थानीय प्रति संशोधित नहीं कर रहे हैं। क्या मैं अर्थशास्त्र में मिश्रित हो गया था या क्या? – Ian

+0

@Ian, मेरा मतलब यह था कि यदि आप एक सूचक पास करते हैं और पॉइंटर चर के मूल्य को बदलते हैं (जैसा कि यह इंगित करता है कि डेटा के मूल्य के विपरीत), केवल स्थानीय सूचक चर का मान बदल जाएगा। और हां, यदि आप डेटा को पॉइंटर पॉइंट संशोधित करते हैं, तो डेटा स्वयं संशोधित होता है और स्थानीय प्रति नहीं। डेटा की कोई स्थानीय प्रति मौजूद नहीं है; सूचक की एक स्थानीय प्रति मौजूद है। –

संबंधित मुद्दे