2010-08-08 9 views
6

मैं स्टैक ओवरफ़्लो पर एक पोस्ट पढ़ रहा हूँ और मैं इस समारोह देखा:लोग कुछ * जैसे char * और buf का उपयोग क्यों करते हैं?

advance_buf(const char*& buf, const char* removed_chars, int size); 

char*& buf यहाँ क्या मतलब है और यही कारण है कि लोगों को यह प्रयोग करते हैं?

+3

ध्यान दें कि यह सी ++ के लिए विशिष्ट है और सी में अर्थहीन है। आप टैग को बदलना चाहेंगे। –

+1

टैग को "C++" पर स्विच किया गया, क्योंकि सी में संदर्भ नहीं हैं। –

+1

ए [पुस्तक] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) आपको इंटरनेट पर स्क्रैप लेने से अधिक जानकारी का एक पूर्ण सेट प्रदान करेगा। – GManNickG

उत्तर

13

इसका मतलब है buf एक सूचक का संदर्भ है, इसलिए इसका मूल्य बदला जा सकता है (साथ ही उस क्षेत्र का मूल्य जो यह इंगित कर रहा है)।

मैं सी में नहीं बल्कि बासी हूँ, लेकिन AFAIK वहाँ सी में कोई संदर्भ हैं और इस कोड को सी ++ (ध्यान दें प्रश्न मूल रूप से टैग किया गया था ) है।

उदाहरण के लिए:

void advance(char*& p, int i) 
{  
    p += i; // change p 
    *p = toupper(*p); // change *p 
} 

int main() { 
    char arr[] = "hello world"; 
    char* p = arr; // p -> "hello world"; 
    advance(p, 6); 
    // p is now "World" 
} 

संपादित करें: टिप्पणी @brett अगर आप buff करने के लिए NULL असाइन कर सकते हैं पूछा और यदि ऐसा है तो जहां एक सूचक पर एक संदर्भ का उपयोग करने का फायदा है। मैं बेहतर दृश्यता के लिए यहां उत्तर दे रहा हूं

आप NULLbuff पर असाइन कर सकते हैं। यह एक त्रुटि नहीं है। हर कोई क्या कह रहा है कि यदि आपने char **pBuff का उपयोग किया है तो pBuffNULL (प्रकार char**) या *pBuffNULL (प्रकार char*) हो सकता है। char*& rBuff का उपयोग करते समय rBuff अभी भी NULL (प्रकार char*) हो सकता है, लेकिन char** टाइप करने वाली कोई इकाई नहीं है जो NULL हो सकती है।

+0

लोग इस तरह की कुछ चीज़ों का उपयोग क्यों करते हैं? इसका उपयोग करने का कोई फायदा है? मुझे लगता है कि char ** buf का उपयोग करना भी सही काम करता है? एक साफ इंटरफेस प्रदान करने के लिए? – brett

+0

कि, और पॉइंटर्स कचरा या नल को इंगित कर सकते हैं, लेकिन संदर्भ हमेशा वैध होते हैं। –

+0

पॉइंटर्स से संदर्भों का उपयोग करके कोड को साफ़ करना सबसे अच्छा है, लेकिन कवर के तहत मूल रूप से एक ही char ** char * से अधिक है। – ggarber

4

buf एक सूचक (सी ++) संकेतक के संदर्भ में। advance_buf पर कॉल करने वाले फ़ंक्शन में const char *foo हो सकता है और अब advance_buffoo पॉइंटर बदल सकता है, जो कॉलिंग फ़ंक्शन में भी दिखाई देगा।

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