2008-12-06 14 views
7

मैं डबल सूचक के तहत संरचना के सदस्य को बदलना चाहता हूं। क्या आप जानते हैं कैसे?सी में संरचना के सूचक के लिए पॉइंटर के साथ कैसे काम करें?

उदाहरण कोड

typedef struct { 
    int member; 
} Ttype; 

void changeMember(Ttype **foo) { 
    //I don`t know how to do it 
    //maybe 
    *foo->member = 1; 
} 

उत्तर

19

(*foo)->member = 1; 

प्रयास करें आप स्पष्ट रूप से उपयोग करने के लिए * पहली जरूरत है। अन्यथा यह dereference सदस्य का प्रयास है।

+0

एक संदेह उदाहरण: यदि क्लास लाइब्रेरी में चेंजमेन() फ़ंक्शन बनाया गया है और मुझे इसे अपने कंसोल ऐप में एक्सेस करने की ज़रूरत है, तो इसे कैसे किया जाना चाहिए ?? : @ जोनाथन लेफ्लर – TechBrkTru

+0

@TechBrkTru: यह देखते हुए कि यह सी है, मुझे यकीन नहीं है कि आप 'कक्षा पुस्तकालय' से क्या मतलब रखते हैं। हालांकि, यदि आपका मतलब 'लाइब्रेरी' है, तो आप बस यह सुनिश्चित कर लें कि आपके पास उस कोड में उपयोग में आवश्यक फ़ंक्शन घोषणाओं के साथ एक शीर्षलेख है जिसे 'चेंज मेम्बर()' कहने की आवश्यकता है, और आप उस लाइब्रेरी के साथ निष्पादन योग्य को लिंक करते हैं कार्यक्रम। यह सब पूरी तरह से नियमित है। यदि आपका मतलब कुछ और है, तो आपको शायद अपना खुद का नया प्रश्न पूछना चाहिए ताकि आप ठीक से समझा सकें। –

+0

@ जेरेडपार हमें संरचना के सदस्य को बदलने में सक्षम होने के लिए पॉइंटर की संरचना के लिए सूचक की आवश्यकता क्यों होगी (ऐसा करने के लिए पर्याप्त सूचक नहीं है?) – Bionix1441

1

शायद (* foo) -> सदस्य = 1 (अगर यह गतिशील रूप से आवंटित है)

+0

शायद नहीं - लेकिन गतिशील आवंटन असमान है। –

7

ऑपरेटर पूर्वता के कारण, आप इस के आसपास कोष्ठक रखना होगा:

(*foo)->member = 1; 
3

तुम एक अस्थायी चर का उपयोग पठनीयता में सुधार कर सकते हैं। उदाहरण के लिए:

Ttype *temp = *foo; 
temp->member = 1; 

यदि आपके पास इसका नियंत्रण है और सी ++ का उपयोग करने की अनुमति है, तो बेहतर तरीका संदर्भ का उपयोग करना है। उदाहरण के लिए:

void changeMember(Ttype *&foo) { 
    foo->member = 1; 
} 
संबंधित मुद्दे