इस सवाल का पहले से ही एक उत्तर है: < / P>
- 3 जवाब
जाहिर है मैं एक सदस्य हूँ एक बड़े क्लब का है जो सी-स्टाइल पॉइंटर्स को सही ढंग से नहीं समझता है यह मेरा कार्यक्रम है:
शून्य परिवर्तनीय (const char * thestring) {thestring = "string two"; } Int _tmain (int argc, _TCHAR * argv []) {const char * teststring = "string one"; changethestring (teststring); Printf ("स्ट्रिंग है:% s। \ N", टेस्टस्ट्रिंग); वापसी 0; }
मेरा इरादा है कि changethestring () को संकेतक को "स्ट्रिंग दो" पर इंगित करना चाहिए। मेरा तर्क यह है कि मैं फ़ंक्शन को एक सूचक दे रहा हूँ फ़ंक्शन मेमोरी में एक अलग क्षेत्र को इंगित करने के लिए पॉइंटर को बदलने में सक्षम होना चाहिए। और यह परिवर्तन समारोह के बाहर रहना चाहिए।
फिर भी ऐसा नहीं होता है क्या। Printf () स्टेटमेंट में, स्ट्रिंग अभी भी "स्ट्रिंग वन" है।
क्या कोई यह बता सकता है कि यह क्यों है, कवर के नीचे क्या हो रहा है, और मैं स्ट्रिंग बदलने के लिए फ़ंक्शन चेंजेटिंग () कैसे लिख सकता हूँ पॉइन्टर पॉइंट के बजाय पॉइन्टर को पॉइंटर पर पॉइन्टर देना चाहिए?
इसका कारण यह है कि सी में, सभी तर्क मूल्य द्वारा भेजे जाते हैं। इसलिए एक वेरिएबल के मान को बदलने के लिए, जो एक सूचक है, आपको इस सूचक को एक पॉइंटर भेजने की आवश्यकता है, इसलिए, सूचक को पॉइंटर के लिए।
अद्यतन: आप स्ट्रिंग को " Code> changethestring फ़ंक्शन, लेकिन इसकी आवश्यकता नहीं है, क्योंकि स्ट्रिंग लीटरल प्रोग्राम के पूरे जीवनकाल के लिए वैश्विक स्ट्रिंग तालिका में संग्रहीत किए जाते हैं। तो ये दोनों:
<पूर्व> const char * STRING_TWO_LITERAL = "स्ट्रिंग दो"; शून्य परिवर्तनीय (const char ** thestring) {* thestring = STRING_TWO_LITERAL; } Int _tmain (int argc, _TCHAR * argv []) {const char * teststring = "string one"; changethestring (& amp; teststring); Printf ("स्ट्रिंग है:% s। \ N", टेस्टस्ट्रिंग); वापसी 0; }
और यह:
शून्य परिवर्तक (const char ** thestring) {* thestring = "string two"; } Int _tmain (int argc, _TCHAR * argv []) {const char * teststring = "string one"; changethestring (& amp; teststring); Printf ("स्ट्रिंग है:% s। \ N", टेस्टस्ट्रिंग); वापसी 0; }
काम करना चाहिए।
Comments
Post a Comment