2013-02-18 10 views
15

मुझे सी के साथ सहज महसूस करना शुरू हुआ और फिर मैं टाइप कास्टिंग में भाग गया। मैं निम्नलिखित एक * ज फ़ाइलएक संरचना के लिए एक शून्य सूचक कास्टिंग

struct data { 
    int value; 
    char *label; 
}; 

में परिभाषित किया गया है और किया है, तो एक और * ज फ़ाइल

# define TYPE  void* 

मैं कैसे struct करने के लिए शून्य सूचक डाली ताकि मैं एक का उपयोग कर सकते हैं में इस परिवर्तनीय "प्रकार वैल" जो कार्यों में पारित हो गया है? उदाहरण के लिए, यदि मैं उस मूल्य का उपयोग करना चाहता हूं जो TYPE वैल पॉइंट्स को इंगित करता है, तो मैं इसे कैसे लगा सकता हूं ताकि मैं उस मान को किसी अन्य फ़ंक्शन पर पास कर सकूं?

+0

'# परिभाषित प्रकार टाइप * * एक बुरा विचार है। यह कम से कम 'typedef' होना चाहिए। गौर करें कि निम्नलिखित घोषणा में क्या होगा: 'प्रकार x, y;' या 'const टाइप x;'। – jamesdlin

+1

इसके अलावा, यदि आप 'शून्य *' पॉइंटर्स और सी से निपट रहे हैं, तो आपको कोई स्पष्ट कास्टिंग करने की आवश्यकता नहीं है। सी 'शून्य *' पॉइंटर्स को * निहित * कास्ट करने की अनुमति देता है: 'शून्य * पी = ...; संरचना डेटा * वैल = पी; '। – jamesdlin

+0

@jamesdlin मैं मानता हूं कि यह एक बुरा विचार है, लेकिन यह मेरा विचार नहीं है, इसलिए मुझे इसके साथ जाना है। तो इसके साथ, जब 'टाइप वैल' एक शून्य सूचक के रूप में एक फ़ंक्शन में पारित किया जाता है, तो मैं बस 'संरचना डेटा * temp = val;' घोषित कर सकता हूं, फिर किसी फ़ंक्शन पर अस्थायी पास कर सकता हूं और मुझे temp-> का उपयोग करने में सक्षम होना चाहिए। मूल्य? – user1852050

उत्तर

19
(struct data*)pointer 

struct data के लिए सूचक को शून्य करने के लिए एक सूचक डाली जाएगी। एक struct को

+0

हो सकता है कि मैं इसे मौत के लिए मार रहा हूं, लेकिन उपर्युक्त उदाहरण में इसका मतलब यह होगा कि TYPE वैल को स्ट्रक्चर पॉइंटर में डालने के लिए ताकि मैं उस मान पर प्राप्त कर सकूं जो मैं इंगित करता हूं: (संरचना डेटा *) वैल? यह वास्तव में क्या करता है? और यदि मैं आगे बढ़ गया और एक चर 'int num = (struct * data) val' घोषित किया, तो क्या वह वैल पॉइंट्स या मेमोरी एड्रेस को केवल वैल्यू पॉइंट प्राप्त करेगा? यदि उत्तरार्द्ध, मैं इसे 'वैल' के मूल्य पर प्राप्त करने के लिए कैसे डालूं, आपके धैर्य के लिए धन्यवाद। – user1852050

+0

@ user1852050 आप संरचना चर और पॉइंटर-टू-स्ट्रक्चर चर को भ्रमित कर रहे हैं। जब आपको किसी संरचना में पॉइंटर प्राप्त करने की आवश्यकता होती है तो आप '&' ऑपरेटर का उपयोग कर सकते हैं। – wRAR

+0

तो मैं एक अस्थायी संरचना के लिए स्मृति घोषित और आवंटित कर सकता हूं और फिर इसे मूल्य और वैल्यू दे सकता हूं? अस्थायी = और वैल के रूप में। और फिर temp-> मान का उपयोग कर मान प्राप्त करें? – user1852050

-1

Typecasting शून्य सूचक इस के लिए

void *vptr; 
typedef struct data 
{ 
    /* members */ 
}tdata; 

निम्नलिखित में किया जा सकता है कि हम struct को टाइपकास्ट कर सकते हैं का कहना है कि यू

तो

कुछ कार्य करने के लिए संरचना चर के रूप में इस vptr भेजना चाहते हैं की सुविधा देता है
void function (tdata *); 
main() 
{ 
    /* here is your function which needs structure pointer 
     type casting void pointer to struct */ 

    function((tdata *) vptr); 
} 

नोट: हम किसी भी प्रकार के शून्य पॉइंटर टाइप कर सकते हैं, जो शून्य पॉइंटर्स का मुख्य उद्देश्य है।

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