2011-03-12 16 views
12

मैं समारोह पैरामीटर से डेटा सूचक वापस जाने के लिए कोशिश कर रहा हूँ के रूप में एक सूचक वापस जाने के लिए:कैसे एक समारोह पैरामीटर

bool dosomething(char *data){ 
    int datasize = 100; 
    data = (char *)malloc(datasize); 
    // here data address = 10968998 
    return 1; 
} 

लेकिन जब मैं निम्नलिखित तरीके से फ़ंक्शन को कॉल करें, शून्य करने के लिए डेटा पते में परिवर्तन :

char *data = NULL; 
if(dosomething(data)){ 
    // here data address = 0 ! (should be 10968998) 
} 

मैं क्या गलत कर रहा हूं?

+1

क्या आप वास्तव में सी का उपयोग कर रहे हैं या आप सी ++ का उपयोग कर रहे हैं (कुछ टिप्पणियां इंगित करती हैं कि आप सी ++ संदर्भों के बारे में बात करते हैं)। –

+0

मैंने इसे सी ++ के रूप में चिह्नित नहीं किया क्योंकि मुझे यह पता नहीं था कि यह mattered है और लोग अक्सर शिकायत करते हैं कि "C++ thats c" नहीं है क्योंकि मैं malloc() का उपयोग कर रहा हूं ... – Rookie

उत्तर

21

आप मूल्य से गुजर रहे हैं। dosomethingdata की स्थानीय प्रतिलिपि को संशोधित करता है - कॉलर इसे कभी नहीं देख पाएगा।

इस का उपयोग करें:

bool dosomething(char **data){ 
    int datasize = 100; 
    *data = (char *)malloc(datasize); 
    return 1; 
} 

char *data = NULL; 
if(dosomething(&data)){ 
} 
+0

ओह डान ... मैं देखता हूं, पॉइंटर को पॉइंटर .. लेकिन ऐसा करने के लिए कोई और तरीका नहीं था? ive देखे गए फ़ंक्शंस जो बिना पॉइंटर लेते हैं, क्या यह मेरे फ़ंक्शन काम को इस तरह से परिवर्तित करना संभव है? (मुझे इसकी कम त्रुटि प्रवण के बिना और इसे पसंद है) – Rookie

+0

आप 'char * dosomething (char *)' कर सकते हैं और नया पॉइंटर वापस कर सकते हैं। – Erik

+0

लेकिन मैं फ़ंक्शन से बूल वैल्यू वापस करना चाहता हूं, मेरा मतलब था कि अगर मैं 'dosomething (& data) 'के बजाय फ़ंक्शन' dosomething (डेटा) 'को कॉल कर सकता हूं? शायद सी ++ में? – Rookie

2
int changeme(int foobar) { 
    foobar = 42; 
    return 0; 
} 

int main(void) { 
    int quux = 0; 
    changeme(quux); 
    /* what do you expect `quux` to have now? */ 
} 

यह अपने टुकड़ा के साथ एक ही बात है।

सी सब कुछ मूल्य से गुजरता है।

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