दिलचस्प पोस्ट
PHP: कैसे एक तत्व से विशिष्ट तत्व को हटाने के लिए? एक स्ट्रीम के रूप में PowerShell लाइन-बाय-लाइन में फ़ाइल को कैसे संसाधित करें अर्ध-बृहदान्त्र का पता लगाने के लिए नियमित अभिव्यक्ति सी ++ तथा लूप के दौरान समाप्त होती है जावा में किसी ऑब्जेक्ट की स्मृति खपत क्या है? क्या विंडोज में एक सेवा के रूप में पायथन स्क्रिप्ट को चलाने के लिए संभव है? यदि संभव हो, तो कैसे? रनटाइम पर एक प्रकार का डिफ़ॉल्ट मान मैं जावास्क्रिप्ट ऑब्जेक्ट वैरिएबल में डुनेबल की गतिशील कुंजी कैसे बनाऊं? संपूर्ण एएससीआईआई फ़ाइल को सी ++ std :: स्ट्रिंग में पढ़ें यौगिक वर्ग के नामों के द्वारा खोज करते समय सुंदर सूप खाली सूची देता है अस्थायी मतलब क्या है? Exec () के बाद PHP StdErr ListBox की पूरी चौड़ाई क्षैतिज रूप से फैलाने के लिए एक सूची बॉक्स आइटम टेम्प्लेट कैसे प्राप्त करें? क्या कोई यह बता सकता है कि BCrypt एक हैश कैसे सत्यापित करता है? शामिल हैं, शामिल हैं, की आवश्यकता है या आवश्यकता है? प्रोलॉग में अलग-अलग सूचियां

सी में एक फ़ंक्शन में पास किए गए एक पॉइंटर को मैं कैसे संशोधित करूं?

इसलिए, मेरे पास कुछ कोड है, जो कि निम्न की तरह है, ताकि स्ट्रैक्ट्स की सूची में एक स्ट्रेट जोड़ सकते हैं:

void barPush(BarList * list,Bar * bar) { // if there is no move to add, then we are done if (bar == NULL) return;//EMPTY_LIST; // allocate space for the new node BarList * newNode = malloc(sizeof(BarList)); // assign the right values newNode->val = bar; newNode->nextBar = list; // and set list to be equal to the new head of the list list = newNode; // This line works, but list only changes inside of this function } 

इन संरचनाओं को निम्नानुसार परिभाषित किया गया है:

 typedef struct Bar { // this isn't too important } Bar; #define EMPTY_LIST NULL typedef struct BarList { Bar * val; struct BarList * nextBar; } BarList; 

और फिर एक और फाइल में मैं निम्नलिखित की तरह कुछ करता हूं:

 BarList * l; l = EMPTY_LIST; barPush(l,&b1); // b1 and b2 are just Bar's barPush(l,&b2); 

हालांकि, इसके बाद, मैं अभी भी EMPTY_LIST की ओर इशारा करता हूं, न कि बार-पश के अंदर संशोधित संस्करण। क्या मुझे संकेतक के रूप में सूची में एक पॉइंटर के रूप में पास करना होगा यदि मैं इसे संशोधित करना चाहता हूं, या क्या कुछ अन्य अंधेरा जप आवश्यक है?

वेब के समाधान से एकत्रित समाधान "सी में एक फ़ंक्शन में पास किए गए एक पॉइंटर को मैं कैसे संशोधित करूं?"

यदि आप ऐसा करना चाहते हैं, तो आपको संकेतक में एक पॉइंटर में पास करना होगा।

 void barPush(BarList ** list,Bar * bar) { if (list == NULL) return; // need to pass in the pointer to your pointer to your list. // if there is no move to add, then we are done if (bar == NULL) return; // allocate space for the new node BarList * newNode = malloc(sizeof(BarList)); // assign the right values newNode->val = bar; newNode->nextBar = *list; // and set the contents of the pointer to the pointer to the head of the list // (ie: the pointer the the head of the list) to the new node. *list = newNode; } 

फिर इसे इस तरह प्रयोग करें:

 BarList * l; l = EMPTY_LIST; barPush(&l,&b1); // b1 and b2 are just Bar's barPush(&l,&b2); 

जोनाथन लेफ्फर ने टिप्पणियों में सूची के नए प्रमुख को वापस करने का सुझाव दिया:

 BarList *barPush(BarList *list,Bar *bar) { // if there is no move to add, then we are done - return unmodified list. if (bar == NULL) return list; // allocate space for the new node BarList * newNode = malloc(sizeof(BarList)); // assign the right values newNode->val = bar; newNode->nextBar = list; // return the new head of the list. return newNode; } 

उपयोग बन जाता है:

 BarList * l; l = EMPTY_LIST; l = barPush(l,&b1); // b1 and b2 are just Bar's l = barPush(l,&b2); 

सामान्य जवाब: उस चीज़ को एक संकेतक पास करें जिसे आप बदलना चाहते हैं।

इस स्थिति में, यह संकेतक के लिए एक संकेतक होगा जिसे आप बदलना चाहते हैं।

याद रखें, सी में, सब कुछ मूल्य से पारित किया जाता है।

आप पॉइंटर में एक पॉइंटर से गुजारें, जैसे यह

 int myFunction(int** param1, int** param2) { // now I can change the ACTUAL pointer - kind of like passing a pointer by reference } 

हाँ, आपको संकेतक के पास पॉइंटर में पास करना होगा। सी मूल्य के आधार पर तर्क देता है, संदर्भ द्वारा नहीं।

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